diff --git a/dataset/extensibility_request_implement.jsonl b/dataset/extensibility_request_implement.jsonl index a05efbae5..925699af8 100644 --- a/dataset/extensibility_request_implement.jsonl +++ b/dataset/extensibility_request_implement.jsonl @@ -21,3 +21,30 @@ {"metadata": {"area": "sales"}, "repo": "microsoftInternal/NAV", "instance_id": "microsoftInternal__NAV-Ext_Request_Impl-30335", "base_commit": "74479eba317847697a5acc52f4d50b811223d41c", "created_at": "2026-07-17T00:00:00Z", "environment_setup_version": "28.0", "project_paths": ["App/Layers/W1/BaseApp"], "patch": "diff --git a/App/Layers/APAC/BaseApp/Sales/Document/SalesHeader.Table.al b/App/Layers/APAC/BaseApp/Sales/Document/SalesHeader.Table.al\nindex 06e6272a1a7..88117357571 100644\n--- a/App/Layers/APAC/BaseApp/Sales/Document/SalesHeader.Table.al\n+++ b/App/Layers/APAC/BaseApp/Sales/Document/SalesHeader.Table.al\n@@ -4676,7 +4676,10 @@ table 36 \"Sales Header\"\n ShouldCreateSalsesLine := not TempSalesLine.IsExtendedText();\n OnRecreateSalesLinesHandleSupplementTypesOnAfterCalcShouldCreateSalsesLine(TempSalesLine, ShouldCreateSalsesLine, SalesLine);\n if ShouldCreateSalsesLine then begin\n- CreateSalesLine(TempSalesLine);\n+ IsHandled := false;\n+ OnBeforeRecreateSalesLine(IsHandled, SalesLine, TempSalesLine, Rec);\n+ if not IsHandled then\n+ CreateSalesLine(TempSalesLine);\n ExtendedTextAdded := false;\n OnAfterRecreateSalesLine(SalesLine, TempSalesLine, Rec);\n \n@@ -10114,6 +10117,18 @@ table 36 \"Sales Header\"\n begin\n end;\n \n+ /// \n+ /// Raised before a sales line is recreated from temporary storage, allowing subscribers to replace the standard sales line creation.\n+ /// \n+ /// Set to true to skip the standard CreateSalesLine call.\n+ /// The sales line record being recreated.\n+ /// The temporary sales line used as source.\n+ /// The parent sales header record.\n+ [IntegrationEvent(false, false)]\n+ local procedure OnBeforeRecreateSalesLine(var IsHandled: Boolean; var SalesLine: Record \"Sales Line\"; var TempSalesLine: Record \"Sales Line\" temporary; var SalesHeader: Record \"Sales Header\")\n+ begin\n+ end;\n+\n /// \n /// Raised after a sales line is recreated from temporary storage.\n /// \ndiff --git a/App/Layers/BE/BaseApp/Sales/Document/SalesHeader.Table.al b/App/Layers/BE/BaseApp/Sales/Document/SalesHeader.Table.al\nindex 53566816419..d8a04fbb227 100644\n--- a/App/Layers/BE/BaseApp/Sales/Document/SalesHeader.Table.al\n+++ b/App/Layers/BE/BaseApp/Sales/Document/SalesHeader.Table.al\n@@ -4615,7 +4615,10 @@ table 36 \"Sales Header\"\n ShouldCreateSalsesLine := not TempSalesLine.IsExtendedText();\n OnRecreateSalesLinesHandleSupplementTypesOnAfterCalcShouldCreateSalsesLine(TempSalesLine, ShouldCreateSalsesLine, SalesLine);\n if ShouldCreateSalsesLine then begin\n- CreateSalesLine(TempSalesLine);\n+ IsHandled := false;\n+ OnBeforeRecreateSalesLine(IsHandled, SalesLine, TempSalesLine, Rec);\n+ if not IsHandled then\n+ CreateSalesLine(TempSalesLine);\n ExtendedTextAdded := false;\n OnAfterRecreateSalesLine(SalesLine, TempSalesLine, Rec);\n \n@@ -9975,6 +9978,18 @@ table 36 \"Sales Header\"\n begin\n end;\n \n+ /// \n+ /// Raised before a sales line is recreated from temporary storage, allowing subscribers to replace the standard sales line creation.\n+ /// \n+ /// Set to true to skip the standard CreateSalesLine call.\n+ /// The sales line record being recreated.\n+ /// The temporary sales line used as source.\n+ /// The parent sales header record.\n+ [IntegrationEvent(false, false)]\n+ local procedure OnBeforeRecreateSalesLine(var IsHandled: Boolean; var SalesLine: Record \"Sales Line\"; var TempSalesLine: Record \"Sales Line\" temporary; var SalesHeader: Record \"Sales Header\")\n+ begin\n+ end;\n+\n /// \n /// Raised after a sales line is recreated from temporary storage.\n /// \ndiff --git a/App/Layers/CH/BaseApp/Sales/Document/SalesHeader.Table.al b/App/Layers/CH/BaseApp/Sales/Document/SalesHeader.Table.al\nindex a80a925abb9..1bb51388e3c 100644\n--- a/App/Layers/CH/BaseApp/Sales/Document/SalesHeader.Table.al\n+++ b/App/Layers/CH/BaseApp/Sales/Document/SalesHeader.Table.al\n@@ -4658,7 +4658,10 @@ table 36 \"Sales Header\"\n ShouldCreateSalsesLine := not TempSalesLine.IsExtendedText();\n OnRecreateSalesLinesHandleSupplementTypesOnAfterCalcShouldCreateSalsesLine(TempSalesLine, ShouldCreateSalsesLine, SalesLine);\n if ShouldCreateSalsesLine then begin\n- CreateSalesLine(TempSalesLine);\n+ IsHandled := false;\n+ OnBeforeRecreateSalesLine(IsHandled, SalesLine, TempSalesLine, Rec);\n+ if not IsHandled then\n+ CreateSalesLine(TempSalesLine);\n ExtendedTextAdded := false;\n OnAfterRecreateSalesLine(SalesLine, TempSalesLine, Rec);\n \n@@ -10030,6 +10033,18 @@ table 36 \"Sales Header\"\n begin\n end;\n \n+ /// \n+ /// Raised before a sales line is recreated from temporary storage, allowing subscribers to replace the standard sales line creation.\n+ /// \n+ /// Set to true to skip the standard CreateSalesLine call.\n+ /// The sales line record being recreated.\n+ /// The temporary sales line used as source.\n+ /// The parent sales header record.\n+ [IntegrationEvent(false, false)]\n+ local procedure OnBeforeRecreateSalesLine(var IsHandled: Boolean; var SalesLine: Record \"Sales Line\"; var TempSalesLine: Record \"Sales Line\" temporary; var SalesHeader: Record \"Sales Header\")\n+ begin\n+ end;\n+\n /// \n /// Raised after a sales line is recreated from temporary storage.\n /// \ndiff --git a/App/Layers/CZ/BaseApp/Sales/Document/SalesHeader.Table.al b/App/Layers/CZ/BaseApp/Sales/Document/SalesHeader.Table.al\nindex 326436a8fa4..f0d0a48b696 100644\n--- a/App/Layers/CZ/BaseApp/Sales/Document/SalesHeader.Table.al\n+++ b/App/Layers/CZ/BaseApp/Sales/Document/SalesHeader.Table.al\n@@ -4602,7 +4602,10 @@ table 36 \"Sales Header\"\n ShouldCreateSalsesLine := not TempSalesLine.IsExtendedText();\n OnRecreateSalesLinesHandleSupplementTypesOnAfterCalcShouldCreateSalsesLine(TempSalesLine, ShouldCreateSalsesLine, SalesLine);\n if ShouldCreateSalsesLine then begin\n- CreateSalesLine(TempSalesLine);\n+ IsHandled := false;\n+ OnBeforeRecreateSalesLine(IsHandled, SalesLine, TempSalesLine, Rec);\n+ if not IsHandled then\n+ CreateSalesLine(TempSalesLine);\n ExtendedTextAdded := false;\n OnAfterRecreateSalesLine(SalesLine, TempSalesLine, Rec);\n \n@@ -9945,6 +9948,18 @@ table 36 \"Sales Header\"\n begin\n end;\n \n+ /// \n+ /// Raised before a sales line is recreated from temporary storage, allowing subscribers to replace the standard sales line creation.\n+ /// \n+ /// Set to true to skip the standard CreateSalesLine call.\n+ /// The sales line record being recreated.\n+ /// The temporary sales line used as source.\n+ /// The parent sales header record.\n+ [IntegrationEvent(false, false)]\n+ local procedure OnBeforeRecreateSalesLine(var IsHandled: Boolean; var SalesLine: Record \"Sales Line\"; var TempSalesLine: Record \"Sales Line\" temporary; var SalesHeader: Record \"Sales Header\")\n+ begin\n+ end;\n+\n /// \n /// Raised after a sales line is recreated from temporary storage.\n /// \ndiff --git a/App/Layers/ES/BaseApp/Sales/Document/SalesHeader.Table.al b/App/Layers/ES/BaseApp/Sales/Document/SalesHeader.Table.al\nindex f8a90897fe1..032c861c87f 100644\n--- a/App/Layers/ES/BaseApp/Sales/Document/SalesHeader.Table.al\n+++ b/App/Layers/ES/BaseApp/Sales/Document/SalesHeader.Table.al\n@@ -4705,7 +4705,10 @@ table 36 \"Sales Header\"\n ShouldCreateSalsesLine := not TempSalesLine.IsExtendedText();\n OnRecreateSalesLinesHandleSupplementTypesOnAfterCalcShouldCreateSalsesLine(TempSalesLine, ShouldCreateSalsesLine, SalesLine);\n if ShouldCreateSalsesLine then begin\n- CreateSalesLine(TempSalesLine);\n+ IsHandled := false;\n+ OnBeforeRecreateSalesLine(IsHandled, SalesLine, TempSalesLine, Rec);\n+ if not IsHandled then\n+ CreateSalesLine(TempSalesLine);\n ExtendedTextAdded := false;\n OnAfterRecreateSalesLine(SalesLine, TempSalesLine, Rec);\n \n@@ -10104,6 +10107,18 @@ table 36 \"Sales Header\"\n begin\n end;\n \n+ /// \n+ /// Raised before a sales line is recreated from temporary storage, allowing subscribers to replace the standard sales line creation.\n+ /// \n+ /// Set to true to skip the standard CreateSalesLine call.\n+ /// The sales line record being recreated.\n+ /// The temporary sales line used as source.\n+ /// The parent sales header record.\n+ [IntegrationEvent(false, false)]\n+ local procedure OnBeforeRecreateSalesLine(var IsHandled: Boolean; var SalesLine: Record \"Sales Line\"; var TempSalesLine: Record \"Sales Line\" temporary; var SalesHeader: Record \"Sales Header\")\n+ begin\n+ end;\n+\n /// \n /// Raised after a sales line is recreated from temporary storage.\n /// \ndiff --git a/App/Layers/FI/BaseApp/Sales/Document/SalesHeader.Table.al b/App/Layers/FI/BaseApp/Sales/Document/SalesHeader.Table.al\nindex 72e1b35541d..efff3eec28f 100644\n--- a/App/Layers/FI/BaseApp/Sales/Document/SalesHeader.Table.al\n+++ b/App/Layers/FI/BaseApp/Sales/Document/SalesHeader.Table.al\n@@ -4602,7 +4602,10 @@ table 36 \"Sales Header\"\n ShouldCreateSalsesLine := not TempSalesLine.IsExtendedText();\n OnRecreateSalesLinesHandleSupplementTypesOnAfterCalcShouldCreateSalsesLine(TempSalesLine, ShouldCreateSalsesLine, SalesLine);\n if ShouldCreateSalsesLine then begin\n- CreateSalesLine(TempSalesLine);\n+ IsHandled := false;\n+ OnBeforeRecreateSalesLine(IsHandled, SalesLine, TempSalesLine, Rec);\n+ if not IsHandled then\n+ CreateSalesLine(TempSalesLine);\n ExtendedTextAdded := false;\n OnAfterRecreateSalesLine(SalesLine, TempSalesLine, Rec);\n \n@@ -9945,6 +9948,18 @@ table 36 \"Sales Header\"\n begin\n end;\n \n+ /// \n+ /// Raised before a sales line is recreated from temporary storage, allowing subscribers to replace the standard sales line creation.\n+ /// \n+ /// Set to true to skip the standard CreateSalesLine call.\n+ /// The sales line record being recreated.\n+ /// The temporary sales line used as source.\n+ /// The parent sales header record.\n+ [IntegrationEvent(false, false)]\n+ local procedure OnBeforeRecreateSalesLine(var IsHandled: Boolean; var SalesLine: Record \"Sales Line\"; var TempSalesLine: Record \"Sales Line\" temporary; var SalesHeader: Record \"Sales Header\")\n+ begin\n+ end;\n+\n /// \n /// Raised after a sales line is recreated from temporary storage.\n /// \ndiff --git a/App/Layers/FR/BaseApp/Sales/Document/SalesHeader.Table.al b/App/Layers/FR/BaseApp/Sales/Document/SalesHeader.Table.al\nindex 67c35c5199a..04e264c37f4 100644\n--- a/App/Layers/FR/BaseApp/Sales/Document/SalesHeader.Table.al\n+++ b/App/Layers/FR/BaseApp/Sales/Document/SalesHeader.Table.al\n@@ -4606,7 +4606,10 @@ table 36 \"Sales Header\"\n ShouldCreateSalsesLine := not TempSalesLine.IsExtendedText();\n OnRecreateSalesLinesHandleSupplementTypesOnAfterCalcShouldCreateSalsesLine(TempSalesLine, ShouldCreateSalsesLine, SalesLine);\n if ShouldCreateSalsesLine then begin\n- CreateSalesLine(TempSalesLine);\n+ IsHandled := false;\n+ OnBeforeRecreateSalesLine(IsHandled, SalesLine, TempSalesLine, Rec);\n+ if not IsHandled then\n+ CreateSalesLine(TempSalesLine);\n ExtendedTextAdded := false;\n OnAfterRecreateSalesLine(SalesLine, TempSalesLine, Rec);\n \n@@ -9949,6 +9952,18 @@ table 36 \"Sales Header\"\n begin\n end;\n \n+ /// \n+ /// Raised before a sales line is recreated from temporary storage, allowing subscribers to replace the standard sales line creation.\n+ /// \n+ /// Set to true to skip the standard CreateSalesLine call.\n+ /// The sales line record being recreated.\n+ /// The temporary sales line used as source.\n+ /// The parent sales header record.\n+ [IntegrationEvent(false, false)]\n+ local procedure OnBeforeRecreateSalesLine(var IsHandled: Boolean; var SalesLine: Record \"Sales Line\"; var TempSalesLine: Record \"Sales Line\" temporary; var SalesHeader: Record \"Sales Header\")\n+ begin\n+ end;\n+\n /// \n /// Raised after a sales line is recreated from temporary storage.\n /// \ndiff --git a/App/Layers/GB/BaseApp/Sales/Document/SalesHeader.Table.al b/App/Layers/GB/BaseApp/Sales/Document/SalesHeader.Table.al\nindex 326436a8fa4..f0d0a48b696 100644\n--- a/App/Layers/GB/BaseApp/Sales/Document/SalesHeader.Table.al\n+++ b/App/Layers/GB/BaseApp/Sales/Document/SalesHeader.Table.al\n@@ -4602,7 +4602,10 @@ table 36 \"Sales Header\"\n ShouldCreateSalsesLine := not TempSalesLine.IsExtendedText();\n OnRecreateSalesLinesHandleSupplementTypesOnAfterCalcShouldCreateSalsesLine(TempSalesLine, ShouldCreateSalsesLine, SalesLine);\n if ShouldCreateSalsesLine then begin\n- CreateSalesLine(TempSalesLine);\n+ IsHandled := false;\n+ OnBeforeRecreateSalesLine(IsHandled, SalesLine, TempSalesLine, Rec);\n+ if not IsHandled then\n+ CreateSalesLine(TempSalesLine);\n ExtendedTextAdded := false;\n OnAfterRecreateSalesLine(SalesLine, TempSalesLine, Rec);\n \n@@ -9945,6 +9948,18 @@ table 36 \"Sales Header\"\n begin\n end;\n \n+ /// \n+ /// Raised before a sales line is recreated from temporary storage, allowing subscribers to replace the standard sales line creation.\n+ /// \n+ /// Set to true to skip the standard CreateSalesLine call.\n+ /// The sales line record being recreated.\n+ /// The temporary sales line used as source.\n+ /// The parent sales header record.\n+ [IntegrationEvent(false, false)]\n+ local procedure OnBeforeRecreateSalesLine(var IsHandled: Boolean; var SalesLine: Record \"Sales Line\"; var TempSalesLine: Record \"Sales Line\" temporary; var SalesHeader: Record \"Sales Header\")\n+ begin\n+ end;\n+\n /// \n /// Raised after a sales line is recreated from temporary storage.\n /// \ndiff --git a/App/Layers/IT/BaseApp/Sales/Document/SalesHeader.Table.al b/App/Layers/IT/BaseApp/Sales/Document/SalesHeader.Table.al\nindex d887a42dfa1..3b59c0f688b 100644\n--- a/App/Layers/IT/BaseApp/Sales/Document/SalesHeader.Table.al\n+++ b/App/Layers/IT/BaseApp/Sales/Document/SalesHeader.Table.al\n@@ -4982,7 +4982,10 @@ table 36 \"Sales Header\"\n ShouldCreateSalsesLine := not TempSalesLine.IsExtendedText();\n OnRecreateSalesLinesHandleSupplementTypesOnAfterCalcShouldCreateSalsesLine(TempSalesLine, ShouldCreateSalsesLine, SalesLine);\n if ShouldCreateSalsesLine then begin\n- CreateSalesLine(TempSalesLine);\n+ IsHandled := false;\n+ OnBeforeRecreateSalesLine(IsHandled, SalesLine, TempSalesLine, Rec);\n+ if not IsHandled then\n+ CreateSalesLine(TempSalesLine);\n ExtendedTextAdded := false;\n OnAfterRecreateSalesLine(SalesLine, TempSalesLine, Rec);\n \n@@ -10676,6 +10679,18 @@ table 36 \"Sales Header\"\n begin\n end;\n \n+ /// \n+ /// Raised before a sales line is recreated from temporary storage, allowing subscribers to replace the standard sales line creation.\n+ /// \n+ /// Set to true to skip the standard CreateSalesLine call.\n+ /// The sales line record being recreated.\n+ /// The temporary sales line used as source.\n+ /// The parent sales header record.\n+ [IntegrationEvent(false, false)]\n+ local procedure OnBeforeRecreateSalesLine(var IsHandled: Boolean; var SalesLine: Record \"Sales Line\"; var TempSalesLine: Record \"Sales Line\" temporary; var SalesHeader: Record \"Sales Header\")\n+ begin\n+ end;\n+\n /// \n /// Raised after a sales line is recreated from temporary storage.\n /// \ndiff --git a/App/Layers/NA/BaseApp/Sales/Document/SalesHeader.Table.al b/App/Layers/NA/BaseApp/Sales/Document/SalesHeader.Table.al\nindex d6fa4ba1a64..28e39de6e0d 100644\n--- a/App/Layers/NA/BaseApp/Sales/Document/SalesHeader.Table.al\n+++ b/App/Layers/NA/BaseApp/Sales/Document/SalesHeader.Table.al\n@@ -4820,7 +4820,10 @@ table 36 \"Sales Header\"\n ShouldCreateSalsesLine := not TempSalesLine.IsExtendedText();\n OnRecreateSalesLinesHandleSupplementTypesOnAfterCalcShouldCreateSalsesLine(TempSalesLine, ShouldCreateSalsesLine, SalesLine);\n if ShouldCreateSalsesLine then begin\n- CreateSalesLine(TempSalesLine);\n+ IsHandled := false;\n+ OnBeforeRecreateSalesLine(IsHandled, SalesLine, TempSalesLine, Rec);\n+ if not IsHandled then\n+ CreateSalesLine(TempSalesLine);\n ExtendedTextAdded := false;\n OnAfterRecreateSalesLine(SalesLine, TempSalesLine, Rec);\n \n@@ -10259,6 +10262,18 @@ table 36 \"Sales Header\"\n begin\n end;\n \n+ /// \n+ /// Raised before a sales line is recreated from temporary storage, allowing subscribers to replace the standard sales line creation.\n+ /// \n+ /// Set to true to skip the standard CreateSalesLine call.\n+ /// The sales line record being recreated.\n+ /// The temporary sales line used as source.\n+ /// The parent sales header record.\n+ [IntegrationEvent(false, false)]\n+ local procedure OnBeforeRecreateSalesLine(var IsHandled: Boolean; var SalesLine: Record \"Sales Line\"; var TempSalesLine: Record \"Sales Line\" temporary; var SalesHeader: Record \"Sales Header\")\n+ begin\n+ end;\n+\n /// \n /// Raised after a sales line is recreated from temporary storage.\n /// \ndiff --git a/App/Layers/NL/BaseApp/Sales/Document/SalesHeader.Table.al b/App/Layers/NL/BaseApp/Sales/Document/SalesHeader.Table.al\nindex bca6498c706..e5c489e5ce0 100644\n--- a/App/Layers/NL/BaseApp/Sales/Document/SalesHeader.Table.al\n+++ b/App/Layers/NL/BaseApp/Sales/Document/SalesHeader.Table.al\n@@ -4626,7 +4626,10 @@ table 36 \"Sales Header\"\n ShouldCreateSalsesLine := not TempSalesLine.IsExtendedText();\n OnRecreateSalesLinesHandleSupplementTypesOnAfterCalcShouldCreateSalsesLine(TempSalesLine, ShouldCreateSalsesLine, SalesLine);\n if ShouldCreateSalsesLine then begin\n- CreateSalesLine(TempSalesLine);\n+ IsHandled := false;\n+ OnBeforeRecreateSalesLine(IsHandled, SalesLine, TempSalesLine, Rec);\n+ if not IsHandled then\n+ CreateSalesLine(TempSalesLine);\n ExtendedTextAdded := false;\n OnAfterRecreateSalesLine(SalesLine, TempSalesLine, Rec);\n \n@@ -9971,6 +9974,18 @@ table 36 \"Sales Header\"\n begin\n end;\n \n+ /// \n+ /// Raised before a sales line is recreated from temporary storage, allowing subscribers to replace the standard sales line creation.\n+ /// \n+ /// Set to true to skip the standard CreateSalesLine call.\n+ /// The sales line record being recreated.\n+ /// The temporary sales line used as source.\n+ /// The parent sales header record.\n+ [IntegrationEvent(false, false)]\n+ local procedure OnBeforeRecreateSalesLine(var IsHandled: Boolean; var SalesLine: Record \"Sales Line\"; var TempSalesLine: Record \"Sales Line\" temporary; var SalesHeader: Record \"Sales Header\")\n+ begin\n+ end;\n+\n /// \n /// Raised after a sales line is recreated from temporary storage.\n /// \ndiff --git a/App/Layers/NO/BaseApp/Sales/Document/SalesHeader.Table.al b/App/Layers/NO/BaseApp/Sales/Document/SalesHeader.Table.al\nindex ae96fcb30d1..dfea1c8ecdf 100644\n--- a/App/Layers/NO/BaseApp/Sales/Document/SalesHeader.Table.al\n+++ b/App/Layers/NO/BaseApp/Sales/Document/SalesHeader.Table.al\n@@ -4683,7 +4683,10 @@ table 36 \"Sales Header\"\n ShouldCreateSalsesLine := not TempSalesLine.IsExtendedText();\n OnRecreateSalesLinesHandleSupplementTypesOnAfterCalcShouldCreateSalsesLine(TempSalesLine, ShouldCreateSalsesLine, SalesLine);\n if ShouldCreateSalsesLine then begin\n- CreateSalesLine(TempSalesLine);\n+ IsHandled := false;\n+ OnBeforeRecreateSalesLine(IsHandled, SalesLine, TempSalesLine, Rec);\n+ if not IsHandled then\n+ CreateSalesLine(TempSalesLine);\n ExtendedTextAdded := false;\n OnAfterRecreateSalesLine(SalesLine, TempSalesLine, Rec);\n \n@@ -10036,6 +10039,18 @@ table 36 \"Sales Header\"\n begin\n end;\n \n+ /// \n+ /// Raised before a sales line is recreated from temporary storage, allowing subscribers to replace the standard sales line creation.\n+ /// \n+ /// Set to true to skip the standard CreateSalesLine call.\n+ /// The sales line record being recreated.\n+ /// The temporary sales line used as source.\n+ /// The parent sales header record.\n+ [IntegrationEvent(false, false)]\n+ local procedure OnBeforeRecreateSalesLine(var IsHandled: Boolean; var SalesLine: Record \"Sales Line\"; var TempSalesLine: Record \"Sales Line\" temporary; var SalesHeader: Record \"Sales Header\")\n+ begin\n+ end;\n+\n /// \n /// Raised after a sales line is recreated from temporary storage.\n /// \ndiff --git a/App/Layers/RU/BaseApp/Sales/Document/SalesHeader.Table.al b/App/Layers/RU/BaseApp/Sales/Document/SalesHeader.Table.al\nindex b5f88f8f215..42c27aa4557 100644\n--- a/App/Layers/RU/BaseApp/Sales/Document/SalesHeader.Table.al\n+++ b/App/Layers/RU/BaseApp/Sales/Document/SalesHeader.Table.al\n@@ -5019,7 +5019,10 @@ table 36 \"Sales Header\"\n ShouldCreateSalsesLine := not TempSalesLine.IsExtendedText();\n OnRecreateSalesLinesHandleSupplementTypesOnAfterCalcShouldCreateSalsesLine(TempSalesLine, ShouldCreateSalsesLine, SalesLine);\n if ShouldCreateSalsesLine then begin\n- CreateSalesLine(TempSalesLine);\n+ IsHandled := false;\n+ OnBeforeRecreateSalesLine(IsHandled, SalesLine, TempSalesLine, Rec);\n+ if not IsHandled then\n+ CreateSalesLine(TempSalesLine);\n ExtendedTextAdded := false;\n OnAfterRecreateSalesLine(SalesLine, TempSalesLine, Rec);\n \n@@ -10464,6 +10467,18 @@ table 36 \"Sales Header\"\n begin\n end;\n \n+ /// \n+ /// Raised before a sales line is recreated from temporary storage, allowing subscribers to replace the standard sales line creation.\n+ /// \n+ /// Set to true to skip the standard CreateSalesLine call.\n+ /// The sales line record being recreated.\n+ /// The temporary sales line used as source.\n+ /// The parent sales header record.\n+ [IntegrationEvent(false, false)]\n+ local procedure OnBeforeRecreateSalesLine(var IsHandled: Boolean; var SalesLine: Record \"Sales Line\"; var TempSalesLine: Record \"Sales Line\" temporary; var SalesHeader: Record \"Sales Header\")\n+ begin\n+ end;\n+\n /// \n /// Raised after a sales line is recreated from temporary storage.\n /// \ndiff --git a/App/Layers/SE/BaseApp/Sales/Document/SalesHeader.Table.al b/App/Layers/SE/BaseApp/Sales/Document/SalesHeader.Table.al\nindex 0a6aed9c4aa..6dc1402513e 100644\n--- a/App/Layers/SE/BaseApp/Sales/Document/SalesHeader.Table.al\n+++ b/App/Layers/SE/BaseApp/Sales/Document/SalesHeader.Table.al\n@@ -4631,7 +4631,10 @@ table 36 \"Sales Header\"\n ShouldCreateSalsesLine := not TempSalesLine.IsExtendedText();\n OnRecreateSalesLinesHandleSupplementTypesOnAfterCalcShouldCreateSalsesLine(TempSalesLine, ShouldCreateSalsesLine, SalesLine);\n if ShouldCreateSalsesLine then begin\n- CreateSalesLine(TempSalesLine);\n+ IsHandled := false;\n+ OnBeforeRecreateSalesLine(IsHandled, SalesLine, TempSalesLine, Rec);\n+ if not IsHandled then\n+ CreateSalesLine(TempSalesLine);\n ExtendedTextAdded := false;\n OnAfterRecreateSalesLine(SalesLine, TempSalesLine, Rec);\n \n@@ -9974,6 +9977,18 @@ table 36 \"Sales Header\"\n begin\n end;\n \n+ /// \n+ /// Raised before a sales line is recreated from temporary storage, allowing subscribers to replace the standard sales line creation.\n+ /// \n+ /// Set to true to skip the standard CreateSalesLine call.\n+ /// The sales line record being recreated.\n+ /// The temporary sales line used as source.\n+ /// The parent sales header record.\n+ [IntegrationEvent(false, false)]\n+ local procedure OnBeforeRecreateSalesLine(var IsHandled: Boolean; var SalesLine: Record \"Sales Line\"; var TempSalesLine: Record \"Sales Line\" temporary; var SalesHeader: Record \"Sales Header\")\n+ begin\n+ end;\n+\n /// \n /// Raised after a sales line is recreated from temporary storage.\n /// \ndiff --git a/App/Layers/W1/BaseApp/Sales/Document/SalesHeader.Table.al b/App/Layers/W1/BaseApp/Sales/Document/SalesHeader.Table.al\nindex cb937f39808..063b6b34730 100644\n--- a/App/Layers/W1/BaseApp/Sales/Document/SalesHeader.Table.al\n+++ b/App/Layers/W1/BaseApp/Sales/Document/SalesHeader.Table.al\n@@ -4602,7 +4602,10 @@ table 36 \"Sales Header\"\n ShouldCreateSalsesLine := not TempSalesLine.IsExtendedText();\n OnRecreateSalesLinesHandleSupplementTypesOnAfterCalcShouldCreateSalsesLine(TempSalesLine, ShouldCreateSalsesLine, SalesLine);\n if ShouldCreateSalsesLine then begin\n- CreateSalesLine(TempSalesLine);\n+ IsHandled := false;\n+ OnBeforeRecreateSalesLine(IsHandled, SalesLine, TempSalesLine, Rec);\n+ if not IsHandled then\n+ CreateSalesLine(TempSalesLine);\n ExtendedTextAdded := false;\n OnAfterRecreateSalesLine(SalesLine, TempSalesLine, Rec);\n \n@@ -9945,6 +9948,18 @@ table 36 \"Sales Header\"\n begin\n end;\n \n+ /// \n+ /// Raised before a sales line is recreated from temporary storage, allowing subscribers to replace the standard sales line creation.\n+ /// \n+ /// Set to true to skip the standard CreateSalesLine call.\n+ /// The sales line record being recreated.\n+ /// The temporary sales line used as source.\n+ /// The parent sales header record.\n+ [IntegrationEvent(false, false)]\n+ local procedure OnBeforeRecreateSalesLine(var IsHandled: Boolean; var SalesLine: Record \"Sales Line\"; var TempSalesLine: Record \"Sales Line\" temporary; var SalesHeader: Record \"Sales Header\")\n+ begin\n+ end;\n+\n /// \n /// Raised after a sales line is recreated from temporary storage.\n /// \n", "expected": [{"text": "A new integration event publisher is added to table 36 \"Sales Header\".", "level": "critical"}, {"text": "In RecreateSalesLinesHandleSupplementTypes, the event is raised with the IsHandled pattern immediately before CreateSalesLine(TempSalesLine), so the standard CreateSalesLine call runs only inside if not IsHandled then.", "level": "critical"}, {"text": "The event passes IsHandled (var), the Sales Line record (var), the temporary Sales Line record (var ... temporary), and the Sales Header (Rec, var).", "level": "critical"}, {"text": "The event publisher is declared as [IntegrationEvent(false, false)] local procedure with an empty body.", "level": "critical"}, {"text": "The identical change is applied to all 15 layer copies of the table (W1, APAC, BE, CH, CZ, ES, FI, FR, GB, IT, NA, NL, NO, RU, SE - exactly 15 .al files modified).", "level": "critical"}, {"text": "The event name follows BC naming conventions for its placement before CreateSalesLine (e.g. OnBeforeRecreateSalesLine).", "level": "expected"}, {"text": "Record parameters use full table names without abbreviations (\"Sales Line\", \"Sales Header\").", "level": "expected"}]} {"metadata": {"area": "purchases"}, "repo": "microsoftInternal/NAV", "instance_id": "microsoftInternal__NAV-Ext_Request_Impl-30216", "base_commit": "74479eba317847697a5acc52f4d50b811223d41c", "created_at": "2026-07-17T00:00:00Z", "environment_setup_version": "28.0", "project_paths": ["App/Layers/W1/BaseApp"], "patch": "diff --git a/App/Layers/APAC/BaseApp/Purchases/Posting/PurchPost.Codeunit.al b/App/Layers/APAC/BaseApp/Purchases/Posting/PurchPost.Codeunit.al\nindex 10cd9282081..29e253cbba6 100644\n--- a/App/Layers/APAC/BaseApp/Purchases/Posting/PurchPost.Codeunit.al\n+++ b/App/Layers/APAC/BaseApp/Purchases/Posting/PurchPost.Codeunit.al\n@@ -6240,7 +6240,10 @@ codeunit 90 \"Purch.-Post\"\n \n if QtyToBeInvoiced <> 0 then begin\n PurchLine.\"Qty. to Invoice\" := QtyToBeInvoiced;\n- InvoicePostingInterface.PrepareJobLine(PurchHeader, PurchLine, PurchLineACY);\n+ IsHandled := false;\n+ OnPostItemJnlLineJobConsumptionOnBeforePrepareJobLine(PurchLine, QtyToBeInvoiced, PurchHeader, PurchLineACY, IsHandled);\n+ if not IsHandled then\n+ InvoicePostingInterface.PrepareJobLine(PurchHeader, PurchLine, PurchLineACY);\n end;\n end;\n end;\n@@ -10884,6 +10887,11 @@ codeunit 90 \"Purch.-Post\"\n begin\n end;\n \n+ [IntegrationEvent(false, false)]\n+ local procedure OnPostItemJnlLineJobConsumptionOnBeforePrepareJobLine(var PurchaseLine: Record \"Purchase Line\"; QuantityToBeInvoiced: Decimal; var PurchaseHeader: Record \"Purchase Header\"; var PurchaseLineACY: Record \"Purchase Line\"; var IsHandled: Boolean)\n+ begin\n+ end;\n+\n [IntegrationEvent(false, false)]\n local procedure OnPostItemJnlLineWhseLineOnAfterPostRevert(var TempWhseJnlLine: Record \"Warehouse Journal Line\" temporary; PurchaseLine: Record \"Purchase Line\")\n begin\ndiff --git a/App/Layers/BE/BaseApp/Purchases/Posting/PurchPost.Codeunit.al b/App/Layers/BE/BaseApp/Purchases/Posting/PurchPost.Codeunit.al\nindex d18b1cde202..96d313b8da7 100644\n--- a/App/Layers/BE/BaseApp/Purchases/Posting/PurchPost.Codeunit.al\n+++ b/App/Layers/BE/BaseApp/Purchases/Posting/PurchPost.Codeunit.al\n@@ -6049,7 +6049,10 @@ codeunit 90 \"Purch.-Post\"\n \n if QtyToBeInvoiced <> 0 then begin\n PurchLine.\"Qty. to Invoice\" := QtyToBeInvoiced;\n- InvoicePostingInterface.PrepareJobLine(PurchHeader, PurchLine, PurchLineACY);\n+ IsHandled := false;\n+ OnPostItemJnlLineJobConsumptionOnBeforePrepareJobLine(PurchLine, QtyToBeInvoiced, PurchHeader, PurchLineACY, IsHandled);\n+ if not IsHandled then\n+ InvoicePostingInterface.PrepareJobLine(PurchHeader, PurchLine, PurchLineACY);\n end;\n end;\n end;\n@@ -10450,6 +10453,11 @@ codeunit 90 \"Purch.-Post\"\n begin\n end;\n \n+ [IntegrationEvent(false, false)]\n+ local procedure OnPostItemJnlLineJobConsumptionOnBeforePrepareJobLine(var PurchaseLine: Record \"Purchase Line\"; QuantityToBeInvoiced: Decimal; var PurchaseHeader: Record \"Purchase Header\"; var PurchaseLineACY: Record \"Purchase Line\"; var IsHandled: Boolean)\n+ begin\n+ end;\n+\n [IntegrationEvent(false, false)]\n local procedure OnPostItemJnlLineWhseLineOnAfterPostRevert(var TempWhseJnlLine: Record \"Warehouse Journal Line\" temporary; PurchaseLine: Record \"Purchase Line\")\n begin\ndiff --git a/App/Layers/CH/BaseApp/Purchases/Posting/PurchPost.Codeunit.al b/App/Layers/CH/BaseApp/Purchases/Posting/PurchPost.Codeunit.al\nindex d7e0620747d..1776ea38104 100644\n--- a/App/Layers/CH/BaseApp/Purchases/Posting/PurchPost.Codeunit.al\n+++ b/App/Layers/CH/BaseApp/Purchases/Posting/PurchPost.Codeunit.al\n@@ -6010,7 +6010,10 @@ codeunit 90 \"Purch.-Post\"\n \n if QtyToBeInvoiced <> 0 then begin\n PurchLine.\"Qty. to Invoice\" := QtyToBeInvoiced;\n- InvoicePostingInterface.PrepareJobLine(PurchHeader, PurchLine, PurchLineACY);\n+ IsHandled := false;\n+ OnPostItemJnlLineJobConsumptionOnBeforePrepareJobLine(PurchLine, QtyToBeInvoiced, PurchHeader, PurchLineACY, IsHandled);\n+ if not IsHandled then\n+ InvoicePostingInterface.PrepareJobLine(PurchHeader, PurchLine, PurchLineACY);\n end;\n end;\n end;\n@@ -10438,6 +10441,11 @@ codeunit 90 \"Purch.-Post\"\n begin\n end;\n \n+ [IntegrationEvent(false, false)]\n+ local procedure OnPostItemJnlLineJobConsumptionOnBeforePrepareJobLine(var PurchaseLine: Record \"Purchase Line\"; QuantityToBeInvoiced: Decimal; var PurchaseHeader: Record \"Purchase Header\"; var PurchaseLineACY: Record \"Purchase Line\"; var IsHandled: Boolean)\n+ begin\n+ end;\n+\n [IntegrationEvent(false, false)]\n local procedure OnPostItemJnlLineWhseLineOnAfterPostRevert(var TempWhseJnlLine: Record \"Warehouse Journal Line\" temporary; PurchaseLine: Record \"Purchase Line\")\n begin\ndiff --git a/App/Layers/ES/BaseApp/Purchases/Posting/PurchPost.Codeunit.al b/App/Layers/ES/BaseApp/Purchases/Posting/PurchPost.Codeunit.al\nindex 9e8964bb530..5088139b4be 100644\n--- a/App/Layers/ES/BaseApp/Purchases/Posting/PurchPost.Codeunit.al\n+++ b/App/Layers/ES/BaseApp/Purchases/Posting/PurchPost.Codeunit.al\n@@ -6128,7 +6128,10 @@ codeunit 90 \"Purch.-Post\"\n \n if QtyToBeInvoiced <> 0 then begin\n PurchLine.\"Qty. to Invoice\" := QtyToBeInvoiced;\n- InvoicePostingInterface.PrepareJobLine(PurchHeader, PurchLine, PurchLineACY);\n+ IsHandled := false;\n+ OnPostItemJnlLineJobConsumptionOnBeforePrepareJobLine(PurchLine, QtyToBeInvoiced, PurchHeader, PurchLineACY, IsHandled);\n+ if not IsHandled then\n+ InvoicePostingInterface.PrepareJobLine(PurchHeader, PurchLine, PurchLineACY);\n end;\n end;\n end;\n@@ -10618,6 +10621,11 @@ codeunit 90 \"Purch.-Post\"\n begin\n end;\n \n+ [IntegrationEvent(false, false)]\n+ local procedure OnPostItemJnlLineJobConsumptionOnBeforePrepareJobLine(var PurchaseLine: Record \"Purchase Line\"; QuantityToBeInvoiced: Decimal; var PurchaseHeader: Record \"Purchase Header\"; var PurchaseLineACY: Record \"Purchase Line\"; var IsHandled: Boolean)\n+ begin\n+ end;\n+\n [IntegrationEvent(false, false)]\n local procedure OnPostItemJnlLineWhseLineOnAfterPostRevert(var TempWhseJnlLine: Record \"Warehouse Journal Line\" temporary; PurchaseLine: Record \"Purchase Line\")\n begin\ndiff --git a/App/Layers/FI/BaseApp/Purchases/Posting/PurchPost.Codeunit.al b/App/Layers/FI/BaseApp/Purchases/Posting/PurchPost.Codeunit.al\nindex c29ebb02d40..76cb98dc0f6 100644\n--- a/App/Layers/FI/BaseApp/Purchases/Posting/PurchPost.Codeunit.al\n+++ b/App/Layers/FI/BaseApp/Purchases/Posting/PurchPost.Codeunit.al\n@@ -6007,7 +6007,10 @@ codeunit 90 \"Purch.-Post\"\n \n if QtyToBeInvoiced <> 0 then begin\n PurchLine.\"Qty. to Invoice\" := QtyToBeInvoiced;\n- InvoicePostingInterface.PrepareJobLine(PurchHeader, PurchLine, PurchLineACY);\n+ IsHandled := false;\n+ OnPostItemJnlLineJobConsumptionOnBeforePrepareJobLine(PurchLine, QtyToBeInvoiced, PurchHeader, PurchLineACY, IsHandled);\n+ if not IsHandled then\n+ InvoicePostingInterface.PrepareJobLine(PurchHeader, PurchLine, PurchLineACY);\n end;\n end;\n end;\n@@ -10408,6 +10411,11 @@ codeunit 90 \"Purch.-Post\"\n begin\n end;\n \n+ [IntegrationEvent(false, false)]\n+ local procedure OnPostItemJnlLineJobConsumptionOnBeforePrepareJobLine(var PurchaseLine: Record \"Purchase Line\"; QuantityToBeInvoiced: Decimal; var PurchaseHeader: Record \"Purchase Header\"; var PurchaseLineACY: Record \"Purchase Line\"; var IsHandled: Boolean)\n+ begin\n+ end;\n+\n [IntegrationEvent(false, false)]\n local procedure OnPostItemJnlLineWhseLineOnAfterPostRevert(var TempWhseJnlLine: Record \"Warehouse Journal Line\" temporary; PurchaseLine: Record \"Purchase Line\")\n begin\ndiff --git a/App/Layers/GB/BaseApp/Purchases/Posting/PurchPost.Codeunit.al b/App/Layers/GB/BaseApp/Purchases/Posting/PurchPost.Codeunit.al\nindex 3ee76260ac6..0e8aeaf3bc3 100644\n--- a/App/Layers/GB/BaseApp/Purchases/Posting/PurchPost.Codeunit.al\n+++ b/App/Layers/GB/BaseApp/Purchases/Posting/PurchPost.Codeunit.al\n@@ -6034,7 +6034,10 @@ codeunit 90 \"Purch.-Post\"\n \n if QtyToBeInvoiced <> 0 then begin\n PurchLine.\"Qty. to Invoice\" := QtyToBeInvoiced;\n- InvoicePostingInterface.PrepareJobLine(PurchHeader, PurchLine, PurchLineACY);\n+ IsHandled := false;\n+ OnPostItemJnlLineJobConsumptionOnBeforePrepareJobLine(PurchLine, QtyToBeInvoiced, PurchHeader, PurchLineACY, IsHandled);\n+ if not IsHandled then\n+ InvoicePostingInterface.PrepareJobLine(PurchHeader, PurchLine, PurchLineACY);\n end;\n end;\n end;\n@@ -10435,6 +10438,11 @@ codeunit 90 \"Purch.-Post\"\n begin\n end;\n \n+ [IntegrationEvent(false, false)]\n+ local procedure OnPostItemJnlLineJobConsumptionOnBeforePrepareJobLine(var PurchaseLine: Record \"Purchase Line\"; QuantityToBeInvoiced: Decimal; var PurchaseHeader: Record \"Purchase Header\"; var PurchaseLineACY: Record \"Purchase Line\"; var IsHandled: Boolean)\n+ begin\n+ end;\n+\n [IntegrationEvent(false, false)]\n local procedure OnPostItemJnlLineWhseLineOnAfterPostRevert(var TempWhseJnlLine: Record \"Warehouse Journal Line\" temporary; PurchaseLine: Record \"Purchase Line\")\n begin\ndiff --git a/App/Layers/IT/BaseApp/Purchases/Posting/PurchPost.Codeunit.al b/App/Layers/IT/BaseApp/Purchases/Posting/PurchPost.Codeunit.al\nindex 08d01188af3..c85424613e9 100644\n--- a/App/Layers/IT/BaseApp/Purchases/Posting/PurchPost.Codeunit.al\n+++ b/App/Layers/IT/BaseApp/Purchases/Posting/PurchPost.Codeunit.al\n@@ -6197,7 +6197,10 @@ codeunit 90 \"Purch.-Post\"\n \n if QtyToBeInvoiced <> 0 then begin\n PurchLine.\"Qty. to Invoice\" := QtyToBeInvoiced;\n- InvoicePostingInterface.PrepareJobLine(PurchHeader, PurchLine, PurchLineACY);\n+ IsHandled := false;\n+ OnPostItemJnlLineJobConsumptionOnBeforePrepareJobLine(PurchLine, QtyToBeInvoiced, PurchHeader, PurchLineACY, IsHandled);\n+ if not IsHandled then\n+ InvoicePostingInterface.PrepareJobLine(PurchHeader, PurchLine, PurchLineACY);\n end;\n end;\n end;\n@@ -10800,6 +10803,11 @@ codeunit 90 \"Purch.-Post\"\n begin\n end;\n \n+ [IntegrationEvent(false, false)]\n+ local procedure OnPostItemJnlLineJobConsumptionOnBeforePrepareJobLine(var PurchaseLine: Record \"Purchase Line\"; QuantityToBeInvoiced: Decimal; var PurchaseHeader: Record \"Purchase Header\"; var PurchaseLineACY: Record \"Purchase Line\"; var IsHandled: Boolean)\n+ begin\n+ end;\n+\n [IntegrationEvent(false, false)]\n local procedure OnPostItemJnlLineWhseLineOnAfterPostRevert(var TempWhseJnlLine: Record \"Warehouse Journal Line\" temporary; PurchaseLine: Record \"Purchase Line\")\n begin\ndiff --git a/App/Layers/NA/BaseApp/Purchases/Posting/PurchPost.Codeunit.al b/App/Layers/NA/BaseApp/Purchases/Posting/PurchPost.Codeunit.al\nindex 0277f162c4f..36058cff319 100644\n--- a/App/Layers/NA/BaseApp/Purchases/Posting/PurchPost.Codeunit.al\n+++ b/App/Layers/NA/BaseApp/Purchases/Posting/PurchPost.Codeunit.al\n@@ -6209,7 +6209,10 @@ codeunit 90 \"Purch.-Post\"\n \n if QtyToBeInvoiced <> 0 then begin\n PurchLine.\"Qty. to Invoice\" := QtyToBeInvoiced;\n- InvoicePostingInterface.PrepareJobLine(PurchHeader, PurchLine, PurchLineACY);\n+ IsHandled := false;\n+ OnPostItemJnlLineJobConsumptionOnBeforePrepareJobLine(PurchLine, QtyToBeInvoiced, PurchHeader, PurchLineACY, IsHandled);\n+ if not IsHandled then\n+ InvoicePostingInterface.PrepareJobLine(PurchHeader, PurchLine, PurchLineACY);\n end;\n end;\n end;\n@@ -11150,6 +11153,11 @@ codeunit 90 \"Purch.-Post\"\n begin\n end;\n \n+ [IntegrationEvent(false, false)]\n+ local procedure OnPostItemJnlLineJobConsumptionOnBeforePrepareJobLine(var PurchaseLine: Record \"Purchase Line\"; QuantityToBeInvoiced: Decimal; var PurchaseHeader: Record \"Purchase Header\"; var PurchaseLineACY: Record \"Purchase Line\"; var IsHandled: Boolean)\n+ begin\n+ end;\n+\n [IntegrationEvent(false, false)]\n local procedure OnPostItemJnlLineWhseLineOnAfterPostRevert(var TempWhseJnlLine: Record \"Warehouse Journal Line\" temporary; PurchaseLine: Record \"Purchase Line\")\n begin\ndiff --git a/App/Layers/RU/BaseApp/Purchases/Posting/PurchPost.Codeunit.al b/App/Layers/RU/BaseApp/Purchases/Posting/PurchPost.Codeunit.al\nindex 8e3e1a4cdfd..2e756f7f722 100644\n--- a/App/Layers/RU/BaseApp/Purchases/Posting/PurchPost.Codeunit.al\n+++ b/App/Layers/RU/BaseApp/Purchases/Posting/PurchPost.Codeunit.al\n@@ -6186,7 +6186,10 @@ codeunit 90 \"Purch.-Post\"\n \n if QtyToBeInvoiced <> 0 then begin\n PurchLine.\"Qty. to Invoice\" := QtyToBeInvoiced;\n- InvoicePostingInterface.PrepareJobLine(PurchHeader, PurchLine, PurchLineACY);\n+ IsHandled := false;\n+ OnPostItemJnlLineJobConsumptionOnBeforePrepareJobLine(PurchLine, QtyToBeInvoiced, PurchHeader, PurchLineACY, IsHandled);\n+ if not IsHandled then\n+ InvoicePostingInterface.PrepareJobLine(PurchHeader, PurchLine, PurchLineACY);\n end;\n end;\n end;\n@@ -11181,6 +11184,11 @@ codeunit 90 \"Purch.-Post\"\n begin\n end;\n \n+ [IntegrationEvent(false, false)]\n+ local procedure OnPostItemJnlLineJobConsumptionOnBeforePrepareJobLine(var PurchaseLine: Record \"Purchase Line\"; QuantityToBeInvoiced: Decimal; var PurchaseHeader: Record \"Purchase Header\"; var PurchaseLineACY: Record \"Purchase Line\"; var IsHandled: Boolean)\n+ begin\n+ end;\n+\n [IntegrationEvent(false, false)]\n local procedure OnPostItemJnlLineWhseLineOnAfterPostRevert(var TempWhseJnlLine: Record \"Warehouse Journal Line\" temporary; PurchaseLine: Record \"Purchase Line\")\n begin\ndiff --git a/App/Layers/W1/BaseApp/Purchases/Posting/PurchPost.Codeunit.al b/App/Layers/W1/BaseApp/Purchases/Posting/PurchPost.Codeunit.al\nindex e31b4f5b0cd..712be0924a9 100644\n--- a/App/Layers/W1/BaseApp/Purchases/Posting/PurchPost.Codeunit.al\n+++ b/App/Layers/W1/BaseApp/Purchases/Posting/PurchPost.Codeunit.al\n@@ -6001,7 +6001,10 @@ codeunit 90 \"Purch.-Post\"\n \n if QtyToBeInvoiced <> 0 then begin\n PurchLine.\"Qty. to Invoice\" := QtyToBeInvoiced;\n- InvoicePostingInterface.PrepareJobLine(PurchHeader, PurchLine, PurchLineACY);\n+ IsHandled := false;\n+ OnPostItemJnlLineJobConsumptionOnBeforePrepareJobLine(PurchLine, QtyToBeInvoiced, PurchHeader, PurchLineACY, IsHandled);\n+ if not IsHandled then\n+ InvoicePostingInterface.PrepareJobLine(PurchHeader, PurchLine, PurchLineACY);\n end;\n end;\n end;\n@@ -10402,6 +10405,11 @@ codeunit 90 \"Purch.-Post\"\n begin\n end;\n \n+ [IntegrationEvent(false, false)]\n+ local procedure OnPostItemJnlLineJobConsumptionOnBeforePrepareJobLine(var PurchaseLine: Record \"Purchase Line\"; QuantityToBeInvoiced: Decimal; var PurchaseHeader: Record \"Purchase Header\"; var PurchaseLineACY: Record \"Purchase Line\"; var IsHandled: Boolean)\n+ begin\n+ end;\n+\n [IntegrationEvent(false, false)]\n local procedure OnPostItemJnlLineWhseLineOnAfterPostRevert(var TempWhseJnlLine: Record \"Warehouse Journal Line\" temporary; PurchaseLine: Record \"Purchase Line\")\n begin\n", "expected": [{"text": "A new integration event publisher is added to codeunit 90 \"Purch.-Post\".", "level": "critical"}, {"text": "In PostItemJnlLineJobConsumption, the event is raised with the IsHandled pattern immediately before InvoicePostingInterface.PrepareJobLine(...), so the standard PrepareJobLine call runs only inside if not IsHandled then (after PurchLine.\"Qty. to Invoice\" is set).", "level": "critical"}, {"text": "The event passes the Purchase Line record (var), the quantity to be invoiced, the Purchase Header record (var), the additional-currency Purchase Line record (var), and IsHandled (var).", "level": "critical"}, {"text": "The event publisher is declared as [IntegrationEvent(false, false)] local procedure with an empty body.", "level": "critical"}, {"text": "The identical change is applied to all 10 layer copies of the codeunit: W1, APAC, BE, CH, ES, FI, GB, IT, NA, and RU (exactly 10 .al files modified).", "level": "critical"}, {"text": "The event name follows BC naming conventions for its placement before PrepareJobLine (e.g. OnPostItemJnlLineJobConsumptionOnBeforePrepareJobLine).", "level": "expected"}, {"text": "Record parameters use full table names without abbreviations (\"Purchase Line\", \"Purchase Header\").", "level": "expected"}]} {"metadata": {"area": "purchases"}, "repo": "microsoftInternal/NAV", "instance_id": "microsoftInternal__NAV-Ext_Request_Impl-30222", "base_commit": "74479eba317847697a5acc52f4d50b811223d41c", "created_at": "2026-07-17T00:00:00Z", "environment_setup_version": "28.0", "project_paths": ["App/Layers/W1/BaseApp"], "patch": "diff --git a/App/Layers/APAC/BaseApp/Purchases/Document/PurchaseHeader.Table.al b/App/Layers/APAC/BaseApp/Purchases/Document/PurchaseHeader.Table.al\nindex 0ee323cf079..9ef6d5e7fd9 100644\n--- a/App/Layers/APAC/BaseApp/Purchases/Document/PurchaseHeader.Table.al\n+++ b/App/Layers/APAC/BaseApp/Purchases/Document/PurchaseHeader.Table.al\n@@ -317,8 +317,12 @@ table 38 \"Purchase Header\"\n \n if (xRec.\"Buy-from Vendor No.\" = \"Buy-from Vendor No.\") and\n (xRec.\"Pay-to Vendor No.\" <> \"Pay-to Vendor No.\")\n- then\n- RecreatePurchLines(PayToVendorTxt);\n+ then begin\n+ IsHandled := false;\n+ OnValidatePayToVendorNoOnBeforeRecreatePurchLines(Rec, xRec, IsHandled);\n+ if not IsHandled then\n+ RecreatePurchLines(PayToVendorTxt);\n+ end;\n \n if not SkipPayToContact then\n UpdatePayToCont(\"Pay-to Vendor No.\");\n@@ -9159,6 +9163,11 @@ table 38 \"Purchase Header\"\n begin\n end;\n \n+ [IntegrationEvent(false, false)]\n+ local procedure OnValidatePayToVendorNoOnBeforeRecreatePurchLines(var PurchaseHeader: Record \"Purchase Header\"; xPurchaseHeader: Record \"Purchase Header\"; var IsHandled: Boolean)\n+ begin\n+ end;\n+\n [IntegrationEvent(false, false)]\n local procedure OnValidatePricesIncludingVATOnBeforePurchLineModify(var PurchaseHeader: Record \"Purchase Header\"; var PurchLine: Record \"Purchase Line\"; Currency: Record Currency; RecalculatePrice: Boolean);\n begin\ndiff --git a/App/Layers/BE/BaseApp/Purchases/Document/PurchaseHeader.Table.al b/App/Layers/BE/BaseApp/Purchases/Document/PurchaseHeader.Table.al\nindex 7bba8ba669f..797f245cee9 100644\n--- a/App/Layers/BE/BaseApp/Purchases/Document/PurchaseHeader.Table.al\n+++ b/App/Layers/BE/BaseApp/Purchases/Document/PurchaseHeader.Table.al\n@@ -308,8 +308,12 @@ table 38 \"Purchase Header\"\n \n if (xRec.\"Buy-from Vendor No.\" = \"Buy-from Vendor No.\") and\n (xRec.\"Pay-to Vendor No.\" <> \"Pay-to Vendor No.\")\n- then\n- RecreatePurchLines(PayToVendorTxt);\n+ then begin\n+ IsHandled := false;\n+ OnValidatePayToVendorNoOnBeforeRecreatePurchLines(Rec, xRec, IsHandled);\n+ if not IsHandled then\n+ RecreatePurchLines(PayToVendorTxt);\n+ end;\n \n if not SkipPayToContact then\n UpdatePayToCont(\"Pay-to Vendor No.\");\n@@ -8923,6 +8927,11 @@ table 38 \"Purchase Header\"\n begin\n end;\n \n+ [IntegrationEvent(false, false)]\n+ local procedure OnValidatePayToVendorNoOnBeforeRecreatePurchLines(var PurchaseHeader: Record \"Purchase Header\"; xPurchaseHeader: Record \"Purchase Header\"; var IsHandled: Boolean)\n+ begin\n+ end;\n+\n [IntegrationEvent(false, false)]\n local procedure OnValidatePricesIncludingVATOnBeforePurchLineModify(var PurchaseHeader: Record \"Purchase Header\"; var PurchLine: Record \"Purchase Line\"; Currency: Record Currency; RecalculatePrice: Boolean);\n begin\ndiff --git a/App/Layers/CH/BaseApp/Purchases/Document/PurchaseHeader.Table.al b/App/Layers/CH/BaseApp/Purchases/Document/PurchaseHeader.Table.al\nindex 7fb72cd0c1d..00f80b700e5 100644\n--- a/App/Layers/CH/BaseApp/Purchases/Document/PurchaseHeader.Table.al\n+++ b/App/Layers/CH/BaseApp/Purchases/Document/PurchaseHeader.Table.al\n@@ -309,8 +309,12 @@ table 38 \"Purchase Header\"\n \n if (xRec.\"Buy-from Vendor No.\" = \"Buy-from Vendor No.\") and\n (xRec.\"Pay-to Vendor No.\" <> \"Pay-to Vendor No.\")\n- then\n- RecreatePurchLines(PayToVendorTxt);\n+ then begin\n+ IsHandled := false;\n+ OnValidatePayToVendorNoOnBeforeRecreatePurchLines(Rec, xRec, IsHandled);\n+ if not IsHandled then\n+ RecreatePurchLines(PayToVendorTxt);\n+ end;\n \n if not SkipPayToContact then\n UpdatePayToCont(\"Pay-to Vendor No.\");\n@@ -8978,6 +8982,11 @@ table 38 \"Purchase Header\"\n begin\n end;\n \n+ [IntegrationEvent(false, false)]\n+ local procedure OnValidatePayToVendorNoOnBeforeRecreatePurchLines(var PurchaseHeader: Record \"Purchase Header\"; xPurchaseHeader: Record \"Purchase Header\"; var IsHandled: Boolean)\n+ begin\n+ end;\n+\n [IntegrationEvent(false, false)]\n local procedure OnValidatePricesIncludingVATOnBeforePurchLineModify(var PurchaseHeader: Record \"Purchase Header\"; var PurchLine: Record \"Purchase Line\"; Currency: Record Currency; RecalculatePrice: Boolean);\n begin\ndiff --git a/App/Layers/DACH/BaseApp/Purchases/Document/PurchaseHeader.Table.al b/App/Layers/DACH/BaseApp/Purchases/Document/PurchaseHeader.Table.al\nindex acc8db0903c..a5c3ddee580 100644\n--- a/App/Layers/DACH/BaseApp/Purchases/Document/PurchaseHeader.Table.al\n+++ b/App/Layers/DACH/BaseApp/Purchases/Document/PurchaseHeader.Table.al\n@@ -305,8 +305,12 @@ table 38 \"Purchase Header\"\n \n if (xRec.\"Buy-from Vendor No.\" = \"Buy-from Vendor No.\") and\n (xRec.\"Pay-to Vendor No.\" <> \"Pay-to Vendor No.\")\n- then\n- RecreatePurchLines(PayToVendorTxt);\n+ then begin\n+ IsHandled := false;\n+ OnValidatePayToVendorNoOnBeforeRecreatePurchLines(Rec, xRec, IsHandled);\n+ if not IsHandled then\n+ RecreatePurchLines(PayToVendorTxt);\n+ end;\n \n if not SkipPayToContact then\n UpdatePayToCont(\"Pay-to Vendor No.\");\n@@ -8913,6 +8917,11 @@ table 38 \"Purchase Header\"\n begin\n end;\n \n+ [IntegrationEvent(false, false)]\n+ local procedure OnValidatePayToVendorNoOnBeforeRecreatePurchLines(var PurchaseHeader: Record \"Purchase Header\"; xPurchaseHeader: Record \"Purchase Header\"; var IsHandled: Boolean)\n+ begin\n+ end;\n+\n [IntegrationEvent(false, false)]\n local procedure OnValidatePricesIncludingVATOnBeforePurchLineModify(var PurchaseHeader: Record \"Purchase Header\"; var PurchLine: Record \"Purchase Line\"; Currency: Record Currency; RecalculatePrice: Boolean);\n begin\ndiff --git a/App/Layers/ES/BaseApp/Purchases/Document/PurchaseHeader.Table.al b/App/Layers/ES/BaseApp/Purchases/Document/PurchaseHeader.Table.al\nindex 58bff43e62d..94c820d47a9 100644\n--- a/App/Layers/ES/BaseApp/Purchases/Document/PurchaseHeader.Table.al\n+++ b/App/Layers/ES/BaseApp/Purchases/Document/PurchaseHeader.Table.al\n@@ -311,8 +311,12 @@ table 38 \"Purchase Header\"\n \n if (xRec.\"Buy-from Vendor No.\" = \"Buy-from Vendor No.\") and\n (xRec.\"Pay-to Vendor No.\" <> \"Pay-to Vendor No.\")\n- then\n- RecreatePurchLines(PayToVendorTxt);\n+ then begin\n+ IsHandled := false;\n+ OnValidatePayToVendorNoOnBeforeRecreatePurchLines(Rec, xRec, IsHandled);\n+ if not IsHandled then\n+ RecreatePurchLines(PayToVendorTxt);\n+ end;\n \n if not SkipPayToContact then\n UpdatePayToCont(\"Pay-to Vendor No.\");\n@@ -9065,6 +9069,11 @@ table 38 \"Purchase Header\"\n begin\n end;\n \n+ [IntegrationEvent(false, false)]\n+ local procedure OnValidatePayToVendorNoOnBeforeRecreatePurchLines(var PurchaseHeader: Record \"Purchase Header\"; xPurchaseHeader: Record \"Purchase Header\"; var IsHandled: Boolean)\n+ begin\n+ end;\n+\n [IntegrationEvent(false, false)]\n local procedure OnValidatePricesIncludingVATOnBeforePurchLineModify(var PurchaseHeader: Record \"Purchase Header\"; var PurchLine: Record \"Purchase Line\"; Currency: Record Currency; RecalculatePrice: Boolean);\n begin\ndiff --git a/App/Layers/FI/BaseApp/Purchases/Document/PurchaseHeader.Table.al b/App/Layers/FI/BaseApp/Purchases/Document/PurchaseHeader.Table.al\nindex 34e8437eb58..b6e2c182236 100644\n--- a/App/Layers/FI/BaseApp/Purchases/Document/PurchaseHeader.Table.al\n+++ b/App/Layers/FI/BaseApp/Purchases/Document/PurchaseHeader.Table.al\n@@ -304,8 +304,12 @@ table 38 \"Purchase Header\"\n \n if (xRec.\"Buy-from Vendor No.\" = \"Buy-from Vendor No.\") and\n (xRec.\"Pay-to Vendor No.\" <> \"Pay-to Vendor No.\")\n- then\n- RecreatePurchLines(PayToVendorTxt);\n+ then begin\n+ IsHandled := false;\n+ OnValidatePayToVendorNoOnBeforeRecreatePurchLines(Rec, xRec, IsHandled);\n+ if not IsHandled then\n+ RecreatePurchLines(PayToVendorTxt);\n+ end;\n \n if not SkipPayToContact then\n UpdatePayToCont(\"Pay-to Vendor No.\");\n@@ -8956,6 +8960,11 @@ table 38 \"Purchase Header\"\n begin\n end;\n \n+ [IntegrationEvent(false, false)]\n+ local procedure OnValidatePayToVendorNoOnBeforeRecreatePurchLines(var PurchaseHeader: Record \"Purchase Header\"; xPurchaseHeader: Record \"Purchase Header\"; var IsHandled: Boolean)\n+ begin\n+ end;\n+\n [IntegrationEvent(false, false)]\n local procedure OnValidatePricesIncludingVATOnBeforePurchLineModify(var PurchaseHeader: Record \"Purchase Header\"; var PurchLine: Record \"Purchase Line\"; Currency: Record Currency; RecalculatePrice: Boolean);\n begin\ndiff --git a/App/Layers/GB/BaseApp/Purchases/Document/PurchaseHeader.Table.al b/App/Layers/GB/BaseApp/Purchases/Document/PurchaseHeader.Table.al\nindex 940f3055ed6..6bb9906048b 100644\n--- a/App/Layers/GB/BaseApp/Purchases/Document/PurchaseHeader.Table.al\n+++ b/App/Layers/GB/BaseApp/Purchases/Document/PurchaseHeader.Table.al\n@@ -304,8 +304,12 @@ table 38 \"Purchase Header\"\n \n if (xRec.\"Buy-from Vendor No.\" = \"Buy-from Vendor No.\") and\n (xRec.\"Pay-to Vendor No.\" <> \"Pay-to Vendor No.\")\n- then\n- RecreatePurchLines(PayToVendorTxt);\n+ then begin\n+ IsHandled := false;\n+ OnValidatePayToVendorNoOnBeforeRecreatePurchLines(Rec, xRec, IsHandled);\n+ if not IsHandled then\n+ RecreatePurchLines(PayToVendorTxt);\n+ end;\n \n if not SkipPayToContact then\n UpdatePayToCont(\"Pay-to Vendor No.\");\n@@ -8915,6 +8919,11 @@ table 38 \"Purchase Header\"\n begin\n end;\n \n+ [IntegrationEvent(false, false)]\n+ local procedure OnValidatePayToVendorNoOnBeforeRecreatePurchLines(var PurchaseHeader: Record \"Purchase Header\"; xPurchaseHeader: Record \"Purchase Header\"; var IsHandled: Boolean)\n+ begin\n+ end;\n+\n [IntegrationEvent(false, false)]\n local procedure OnValidatePricesIncludingVATOnBeforePurchLineModify(var PurchaseHeader: Record \"Purchase Header\"; var PurchLine: Record \"Purchase Line\"; Currency: Record Currency; RecalculatePrice: Boolean);\n begin\ndiff --git a/App/Layers/IT/BaseApp/Purchases/Document/PurchaseHeader.Table.al b/App/Layers/IT/BaseApp/Purchases/Document/PurchaseHeader.Table.al\nindex bd7e148eaa2..deb66952902 100644\n--- a/App/Layers/IT/BaseApp/Purchases/Document/PurchaseHeader.Table.al\n+++ b/App/Layers/IT/BaseApp/Purchases/Document/PurchaseHeader.Table.al\n@@ -342,8 +342,12 @@ table 38 \"Purchase Header\"\n \n if (xRec.\"Buy-from Vendor No.\" = \"Buy-from Vendor No.\") and\n (xRec.\"Pay-to Vendor No.\" <> \"Pay-to Vendor No.\")\n- then\n- RecreatePurchLines(PayToVendorTxt);\n+ then begin\n+ IsHandled := false;\n+ OnValidatePayToVendorNoOnBeforeRecreatePurchLines(Rec, xRec, IsHandled);\n+ if not IsHandled then\n+ RecreatePurchLines(PayToVendorTxt);\n+ end;\n \n if not SkipPayToContact then\n UpdatePayToCont(\"Pay-to Vendor No.\");\n@@ -9546,6 +9550,11 @@ table 38 \"Purchase Header\"\n begin\n end;\n \n+ [IntegrationEvent(false, false)]\n+ local procedure OnValidatePayToVendorNoOnBeforeRecreatePurchLines(var PurchaseHeader: Record \"Purchase Header\"; xPurchaseHeader: Record \"Purchase Header\"; var IsHandled: Boolean)\n+ begin\n+ end;\n+\n [IntegrationEvent(false, false)]\n local procedure OnValidatePricesIncludingVATOnBeforePurchLineModify(var PurchaseHeader: Record \"Purchase Header\"; var PurchLine: Record \"Purchase Line\"; Currency: Record Currency; RecalculatePrice: Boolean);\n begin\ndiff --git a/App/Layers/NA/BaseApp/Purchases/Document/PurchaseHeader.Table.al b/App/Layers/NA/BaseApp/Purchases/Document/PurchaseHeader.Table.al\nindex 674ed7b1c67..74f3abd8875 100644\n--- a/App/Layers/NA/BaseApp/Purchases/Document/PurchaseHeader.Table.al\n+++ b/App/Layers/NA/BaseApp/Purchases/Document/PurchaseHeader.Table.al\n@@ -305,8 +305,12 @@ table 38 \"Purchase Header\"\n \n if (xRec.\"Buy-from Vendor No.\" = \"Buy-from Vendor No.\") and\n (xRec.\"Pay-to Vendor No.\" <> \"Pay-to Vendor No.\")\n- then\n- RecreatePurchLines(PayToVendorTxt);\n+ then begin\n+ IsHandled := false;\n+ OnValidatePayToVendorNoOnBeforeRecreatePurchLines(Rec, xRec, IsHandled);\n+ if not IsHandled then\n+ RecreatePurchLines(PayToVendorTxt);\n+ end;\n \n if not SkipPayToContact then\n UpdatePayToCont(\"Pay-to Vendor No.\");\n@@ -9104,6 +9108,11 @@ table 38 \"Purchase Header\"\n begin\n end;\n \n+ [IntegrationEvent(false, false)]\n+ local procedure OnValidatePayToVendorNoOnBeforeRecreatePurchLines(var PurchaseHeader: Record \"Purchase Header\"; xPurchaseHeader: Record \"Purchase Header\"; var IsHandled: Boolean)\n+ begin\n+ end;\n+\n [IntegrationEvent(false, false)]\n local procedure OnValidatePricesIncludingVATOnBeforePurchLineModify(var PurchaseHeader: Record \"Purchase Header\"; var PurchLine: Record \"Purchase Line\"; Currency: Record Currency; RecalculatePrice: Boolean);\n begin\ndiff --git a/App/Layers/NL/BaseApp/Purchases/Document/PurchaseHeader.Table.al b/App/Layers/NL/BaseApp/Purchases/Document/PurchaseHeader.Table.al\nindex 350fcba0668..8de0164879d 100644\n--- a/App/Layers/NL/BaseApp/Purchases/Document/PurchaseHeader.Table.al\n+++ b/App/Layers/NL/BaseApp/Purchases/Document/PurchaseHeader.Table.al\n@@ -308,8 +308,12 @@ table 38 \"Purchase Header\"\n \n if (xRec.\"Buy-from Vendor No.\" = \"Buy-from Vendor No.\") and\n (xRec.\"Pay-to Vendor No.\" <> \"Pay-to Vendor No.\")\n- then\n- RecreatePurchLines(PayToVendorTxt);\n+ then begin\n+ IsHandled := false;\n+ OnValidatePayToVendorNoOnBeforeRecreatePurchLines(Rec, xRec, IsHandled);\n+ if not IsHandled then\n+ RecreatePurchLines(PayToVendorTxt);\n+ end;\n \n if not SkipPayToContact then\n UpdatePayToCont(\"Pay-to Vendor No.\");\n@@ -8934,6 +8938,11 @@ table 38 \"Purchase Header\"\n begin\n end;\n \n+ [IntegrationEvent(false, false)]\n+ local procedure OnValidatePayToVendorNoOnBeforeRecreatePurchLines(var PurchaseHeader: Record \"Purchase Header\"; xPurchaseHeader: Record \"Purchase Header\"; var IsHandled: Boolean)\n+ begin\n+ end;\n+\n [IntegrationEvent(false, false)]\n local procedure OnValidatePricesIncludingVATOnBeforePurchLineModify(var PurchaseHeader: Record \"Purchase Header\"; var PurchLine: Record \"Purchase Line\"; Currency: Record Currency; RecalculatePrice: Boolean);\n begin\ndiff --git a/App/Layers/NO/BaseApp/Purchases/Document/PurchaseHeader.Table.al b/App/Layers/NO/BaseApp/Purchases/Document/PurchaseHeader.Table.al\nindex ec25e3fbe88..303c99c5a67 100644\n--- a/App/Layers/NO/BaseApp/Purchases/Document/PurchaseHeader.Table.al\n+++ b/App/Layers/NO/BaseApp/Purchases/Document/PurchaseHeader.Table.al\n@@ -307,8 +307,12 @@ table 38 \"Purchase Header\"\n \n if (xRec.\"Buy-from Vendor No.\" = \"Buy-from Vendor No.\") and\n (xRec.\"Pay-to Vendor No.\" <> \"Pay-to Vendor No.\")\n- then\n- RecreatePurchLines(PayToVendorTxt);\n+ then begin\n+ IsHandled := false;\n+ OnValidatePayToVendorNoOnBeforeRecreatePurchLines(Rec, xRec, IsHandled);\n+ if not IsHandled then\n+ RecreatePurchLines(PayToVendorTxt);\n+ end;\n \n if not SkipPayToContact then\n UpdatePayToCont(\"Pay-to Vendor No.\");\n@@ -8939,6 +8943,11 @@ table 38 \"Purchase Header\"\n begin\n end;\n \n+ [IntegrationEvent(false, false)]\n+ local procedure OnValidatePayToVendorNoOnBeforeRecreatePurchLines(var PurchaseHeader: Record \"Purchase Header\"; xPurchaseHeader: Record \"Purchase Header\"; var IsHandled: Boolean)\n+ begin\n+ end;\n+\n [IntegrationEvent(false, false)]\n local procedure OnValidatePricesIncludingVATOnBeforePurchLineModify(var PurchaseHeader: Record \"Purchase Header\"; var PurchLine: Record \"Purchase Line\"; Currency: Record Currency; RecalculatePrice: Boolean);\n begin\ndiff --git a/App/Layers/RU/BaseApp/Purchases/Document/PurchaseHeader.Table.al b/App/Layers/RU/BaseApp/Purchases/Document/PurchaseHeader.Table.al\nindex a19aac702af..345fafe7f1e 100644\n--- a/App/Layers/RU/BaseApp/Purchases/Document/PurchaseHeader.Table.al\n+++ b/App/Layers/RU/BaseApp/Purchases/Document/PurchaseHeader.Table.al\n@@ -309,8 +309,12 @@ table 38 \"Purchase Header\"\n \n if (xRec.\"Buy-from Vendor No.\" = \"Buy-from Vendor No.\") and\n (xRec.\"Pay-to Vendor No.\" <> \"Pay-to Vendor No.\")\n- then\n- RecreatePurchLines(PayToVendorTxt);\n+ then begin\n+ IsHandled := false;\n+ OnValidatePayToVendorNoOnBeforeRecreatePurchLines(Rec, xRec, IsHandled);\n+ if not IsHandled then\n+ RecreatePurchLines(PayToVendorTxt);\n+ end;\n \n if not SkipPayToContact then\n UpdatePayToCont(\"Pay-to Vendor No.\");\n@@ -9573,6 +9577,11 @@ table 38 \"Purchase Header\"\n begin\n end;\n \n+ [IntegrationEvent(false, false)]\n+ local procedure OnValidatePayToVendorNoOnBeforeRecreatePurchLines(var PurchaseHeader: Record \"Purchase Header\"; xPurchaseHeader: Record \"Purchase Header\"; var IsHandled: Boolean)\n+ begin\n+ end;\n+\n [IntegrationEvent(false, false)]\n local procedure OnValidatePricesIncludingVATOnBeforePurchLineModify(var PurchaseHeader: Record \"Purchase Header\"; var PurchLine: Record \"Purchase Line\"; Currency: Record Currency; RecalculatePrice: Boolean);\n begin\ndiff --git a/App/Layers/SE/BaseApp/Purchases/Document/PurchaseHeader.Table.al b/App/Layers/SE/BaseApp/Purchases/Document/PurchaseHeader.Table.al\nindex 045bb60476b..fe0cba8fad6 100644\n--- a/App/Layers/SE/BaseApp/Purchases/Document/PurchaseHeader.Table.al\n+++ b/App/Layers/SE/BaseApp/Purchases/Document/PurchaseHeader.Table.al\n@@ -304,8 +304,12 @@ table 38 \"Purchase Header\"\n \n if (xRec.\"Buy-from Vendor No.\" = \"Buy-from Vendor No.\") and\n (xRec.\"Pay-to Vendor No.\" <> \"Pay-to Vendor No.\")\n- then\n- RecreatePurchLines(PayToVendorTxt);\n+ then begin\n+ IsHandled := false;\n+ OnValidatePayToVendorNoOnBeforeRecreatePurchLines(Rec, xRec, IsHandled);\n+ if not IsHandled then\n+ RecreatePurchLines(PayToVendorTxt);\n+ end;\n \n if not SkipPayToContact then\n UpdatePayToCont(\"Pay-to Vendor No.\");\n@@ -8912,6 +8916,11 @@ table 38 \"Purchase Header\"\n begin\n end;\n \n+ [IntegrationEvent(false, false)]\n+ local procedure OnValidatePayToVendorNoOnBeforeRecreatePurchLines(var PurchaseHeader: Record \"Purchase Header\"; xPurchaseHeader: Record \"Purchase Header\"; var IsHandled: Boolean)\n+ begin\n+ end;\n+\n [IntegrationEvent(false, false)]\n local procedure OnValidatePricesIncludingVATOnBeforePurchLineModify(var PurchaseHeader: Record \"Purchase Header\"; var PurchLine: Record \"Purchase Line\"; Currency: Record Currency; RecalculatePrice: Boolean);\n begin\ndiff --git a/App/Layers/W1/BaseApp/Purchases/Document/PurchaseHeader.Table.al b/App/Layers/W1/BaseApp/Purchases/Document/PurchaseHeader.Table.al\nindex af236a023f3..647603312b8 100644\n--- a/App/Layers/W1/BaseApp/Purchases/Document/PurchaseHeader.Table.al\n+++ b/App/Layers/W1/BaseApp/Purchases/Document/PurchaseHeader.Table.al\n@@ -304,8 +304,12 @@ table 38 \"Purchase Header\"\n \n if (xRec.\"Buy-from Vendor No.\" = \"Buy-from Vendor No.\") and\n (xRec.\"Pay-to Vendor No.\" <> \"Pay-to Vendor No.\")\n- then\n- RecreatePurchLines(PayToVendorTxt);\n+ then begin\n+ IsHandled := false;\n+ OnValidatePayToVendorNoOnBeforeRecreatePurchLines(Rec, xRec, IsHandled);\n+ if not IsHandled then\n+ RecreatePurchLines(PayToVendorTxt);\n+ end;\n \n if not SkipPayToContact then\n UpdatePayToCont(\"Pay-to Vendor No.\");\n@@ -8907,6 +8911,11 @@ table 38 \"Purchase Header\"\n begin\n end;\n \n+ [IntegrationEvent(false, false)]\n+ local procedure OnValidatePayToVendorNoOnBeforeRecreatePurchLines(var PurchaseHeader: Record \"Purchase Header\"; xPurchaseHeader: Record \"Purchase Header\"; var IsHandled: Boolean)\n+ begin\n+ end;\n+\n [IntegrationEvent(false, false)]\n local procedure OnValidatePricesIncludingVATOnBeforePurchLineModify(var PurchaseHeader: Record \"Purchase Header\"; var PurchLine: Record \"Purchase Line\"; Currency: Record Currency; RecalculatePrice: Boolean);\n begin\n", "expected": [{"text": "A new integration event publisher is added to table 38 \"Purchase Header\".", "level": "critical"}, {"text": "In the OnValidate trigger of field \"Pay-to Vendor No.\", the event is raised with the IsHandled pattern immediately before RecreatePurchLines(PayToVendorTxt), so the standard RecreatePurchLines call runs only inside if not IsHandled then.", "level": "critical"}, {"text": "The event passes IsHandled (var), the Purchase Header record (Rec, var), and the previous Purchase Header record (xRec).", "level": "critical"}, {"text": "The event publisher is declared as [IntegrationEvent(false, false)] local procedure with an empty body.", "level": "critical"}, {"text": "The identical change is applied to all 14 layer copies of the table (W1, APAC, BE, CH, DACH, ES, FI, GB, IT, NA, NL, NO, RU, SE - exactly 14 .al files modified).", "level": "critical"}, {"text": "The event name follows BC naming conventions for its placement before RecreatePurchLines (e.g. OnValidatePayToVendorNoOnBeforeRecreatePurchLines or OnBeforeRecreatePurchLines).", "level": "expected"}, {"text": "Record parameters use full table names without abbreviations (\"Purchase Header\").", "level": "expected"}]} +{"metadata":{"area":"purchases"},"repo":"microsoftInternal/NAV","instance_id":"microsoftInternal__NAV-Ext_Request_Impl-30278","base_commit":"f7e26eba1bf2a4a87f8104373ca7519f792467f8","created_at":"2026-06-22","environment_setup_version":"28.0","project_paths":["App/Layers/W1/BaseApp"],"patch":"diff --git a/App/Layers/W1/BaseApp/Purchases/History/UndoPurchaseReceiptLine.Codeunit.al b/App/Layers/W1/BaseApp/Purchases/History/UndoPurchaseReceiptLine.Codeunit.al\nindex cdead00a2bf..821c5335741 100644\n--- a/App/Layers/W1/BaseApp/Purchases/History/UndoPurchaseReceiptLine.Codeunit.al\n+++ b/App/Layers/W1/BaseApp/Purchases/History/UndoPurchaseReceiptLine.Codeunit.al\n@@ -85,6 +85,7 @@ codeunit 5813 \"Undo Purchase Receipt Line\"\n ItemRcptEntryNo: Integer;\n DocLineNo: Integer;\n PostedWhseRcptLineFound: Boolean;\n+ ShouldFindPostedWhseRcptLine: Boolean;\n begin\n OnBeforeCode(PurchRcptLine, UndoPostingMgt);\n \n@@ -106,7 +107,9 @@ codeunit 5813 \"Undo Purchase Receipt Line\"\n \n UndoDropShipmentPurchRcptLine(PurchRcptLine);\n \n- if PurchRcptLine.Type = PurchRcptLine.Type::Item then begin\n+ ShouldFindPostedWhseRcptLine := PurchRcptLine.Type = PurchRcptLine.Type::Item;\n+ OnCodeOnBeforeFindPostedWhseRcptLine(PurchRcptLine, ShouldFindPostedWhseRcptLine);\n+ if ShouldFindPostedWhseRcptLine then begin\n PostedWhseRcptLineFound :=\n WhseUndoQty.FindPostedWhseRcptLine(\n PostedWhseRcptLine,\n@@ -651,6 +654,11 @@ codeunit 5813 \"Undo Purchase Receipt Line\"\n begin\n end;\n \n+ [IntegrationEvent(false, false)]\n+ local procedure OnCodeOnBeforeFindPostedWhseRcptLine(var PurchRcptLine: Record \"Purch. Rcpt. Line\"; var ShouldFindPostedWhseRcptLine: Boolean)\n+ begin\n+ end;\n+\n [IntegrationEvent(false, false)]\n local procedure OnAfterNewPurchRcptLineInsert(var NewPurchRcptLine: Record \"Purch. Rcpt. Line\"; OldPurchRcptLine: Record \"Purch. Rcpt. Line\"; var TempGlobalItemEntryRelation: Record \"Item Entry Relation\" temporary; var SkipInsertItemEntryRelation: Boolean)\n begin\n","expected":[{"text":"In codeunit 5813 \"Undo Purchase Receipt Line\", Added integration event OnBeforeFindPostedWhseRcptLine in or for \"Code\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\nShouldFindPostedWhseRcptLine := true;\n OnBeforeFindPostedWhseRcptLine(PurchRcptLine, ShouldFindPostedWhseRcptLine);\n if ShouldFindPostedWhseRcptLine then\n if PostedWhseRcptLine.FindPostedWhseRcptLine(PurchRcptLine) then\n```","level":"critical"},{"text":"In codeunit 5813 \"Undo Purchase Receipt Line\", Integration event publisher in or for \"OnBeforeFindPostedWhseRcptLine\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\n[IntegrationEvent(false, false)]\n local procedure OnBeforeFindPostedWhseRcptLine(PurchRcptLine: Record \"Purch. Rcpt. Line\"; var ShouldFindPostedWhseRcptLine: Boolean)\n begin\n end;\n```","level":"critical"},{"text":"The change is applied to exactly 1 affected .al file(s) across these layers: W1. The affected files are: App/Layers/W1/BaseApp/Purchases/History/UndoPurchaseReceiptLine.Codeunit.al.","level":"critical"},{"text":"The implementation is limited to the requested extensibility change and does not modify unrelated application behavior or files.","level":"expected"}]} +{"metadata":{"area":"assembly"},"repo":"microsoftInternal/NAV","instance_id":"microsoftInternal__NAV-Ext_Request_Impl-30258","base_commit":"f7e26eba1bf2a4a87f8104373ca7519f792467f8","created_at":"2026-06-24","environment_setup_version":"28.0","project_paths":["App/Layers/W1/BaseApp"],"patch":"diff --git a/App/Layers/W1/BaseApp/Assembly/Document/AssemblyLineManagement.Codeunit.al b/App/Layers/W1/BaseApp/Assembly/Document/AssemblyLineManagement.Codeunit.al\nindex 22edc066d4e..e45db3aac5f 100644\n--- a/App/Layers/W1/BaseApp/Assembly/Document/AssemblyLineManagement.Codeunit.al\n+++ b/App/Layers/W1/BaseApp/Assembly/Document/AssemblyLineManagement.Codeunit.al\n@@ -638,6 +638,10 @@ codeunit 905 \"Assembly Line Management\"\n CopyInventoriableItemAsmLines(TempAssemblyLine2, TempAssemblyLine);\n AvailToPromise(TempAssemblyHeader, TempAssemblyLine2, QtyAvailToMake, EarliestAvailableDateX);\n QtyAvailTooLow := QtyAvailToMake < TempAssemblyHeader.\"Remaining Quantity\";\n+ IsHandled := false;\n+ OnShowAvailabilityOnAfterCalcQtyAvailTooLow(TempAssemblyHeader, TempAssemblyLine, ShowPageEvenIfEnoughComponentsAvailable, QtyAvailToMake, EarliestAvailableDateX, QtyAvailTooLow, Rollback, IsHandled);\n+ if IsHandled then\n+ exit(Rollback);\n \n if QtyAvailTooLow and not ShowPageEvenIfEnoughComponentsAvailable then\n Rollback := CreateAndSendNotification(TempAssemblyHeader, TempAssemblyLine)\n@@ -1013,6 +1017,11 @@ codeunit 905 \"Assembly Line Management\"\n begin\n end;\n \n+ [IntegrationEvent(false, false)]\n+ local procedure OnShowAvailabilityOnAfterCalcQtyAvailTooLow(var TempAssemblyHeader: Record \"Assembly Header\" temporary; var TempAssemblyLine: Record \"Assembly Line\" temporary; ShowPageEvenIfEnoughComponentsAvailable: Boolean; QtyAvailToMake: Decimal; EarliestAvailableDate: Date; var QtyAvailTooLow: Boolean; var RollBack: Boolean; var IsHandled: Boolean)\n+ begin\n+ end;\n+\n [IntegrationEvent(false, false)]\n local procedure OnBeforeUpdateAssemblyLines(var AsmHeader: Record \"Assembly Header\"; OldAsmHeader: Record \"Assembly Header\"; FieldNum: Integer; ReplaceLinesFromBOM: Boolean; CurrFieldNo: Integer; CurrentFieldNum: Integer; var IsHandled: Boolean; HideValidationDialog: Boolean)\n begin\n","expected":[{"text":"In codeunit 905 \"Assembly Line Management\", Added event call in or for \"ShowAvailability\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\nCopyInventoriableItemAsmLines(TempAssemblyLine2, TempAssemblyLine);\n AvailToPromise(TempAssemblyHeader, TempAssemblyLine2, QtyAvailToMake, EarliestAvailableDateX);\n QtyAvailTooLow := QtyAvailToMake < TempAssemblyHeader.\"Remaining Quantity\";\n IsHandled := false;\n OnShowAvailabilityOnAfterCalcQtyAvailTooLow(TempAssemblyHeader, TempAssemblyLine, ShowPageEvenIfEnoughComponentsAvailable, QtyAvailTooLow, IsHandled, Rollback, WarningModeOff);\n if IsHandled then\n exit(Rollback);\n\n if QtyAvailTooLow and not ShowPageEvenIfEnoughComponentsAvailable then\n Rollback := CreateAndSendNotification(TempAssemblyHeader, TempAssemblyLine)\n```","level":"critical"},{"text":"In codeunit 905 \"Assembly Line Management\", Added new integration event in or for \"OnShowAvailabilityOnAfterCalcQtyAvailTooLow\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\n[IntegrationEvent(false, false)]\n local procedure OnShowAvailabilityOnAfterCalcQtyAvailTooLow(var TempAssemblyHeader: Record \"Assembly Header\" temporary; var TempAssemblyLine: Record \"Assembly Line\" temporary; ShowPageEvenIfEnoughComponentsAvailable: Boolean; QtyAvailTooLow: Boolean; var IsHandled: Boolean; var Rollback: Boolean; WarningModeOff: Boolean)\n begin\n end;\n```","level":"critical"},{"text":"The change is applied to exactly 1 affected .al file(s) across these layers: W1. The affected files are: App/Layers/W1/BaseApp/Assembly/Document/AssemblyLineManagement.Codeunit.al.","level":"critical"},{"text":"The implementation is limited to the requested extensibility change and does not modify unrelated application behavior or files.","level":"expected"}]} +{"metadata":{"area":"warehouse"},"repo":"microsoftInternal/NAV","instance_id":"microsoftInternal__NAV-Ext_Request_Impl-30253","base_commit":"f7e26eba1bf2a4a87f8104373ca7519f792467f8","created_at":"2026-06-09","environment_setup_version":"28.0","project_paths":["App/Layers/W1/BaseApp"],"patch":"diff --git a/App/Layers/W1/BaseApp/Warehouse/Document/WhsePostShipment.Codeunit.al b/App/Layers/W1/BaseApp/Warehouse/Document/WhsePostShipment.Codeunit.al\nindex 1235c7aa667..14080065f43 100644\n--- a/App/Layers/W1/BaseApp/Warehouse/Document/WhsePostShipment.Codeunit.al\n+++ b/App/Layers/W1/BaseApp/Warehouse/Document/WhsePostShipment.Codeunit.al\n@@ -294,6 +294,7 @@ codeunit 5763 \"Whse.-Post Shipment\"\n OnPostUpdateWhseDocumentsOnBeforeUpdateWhseShptHeader(WhseShptHeaderParam);\n \n WhseShptLine2.SetRange(\"No.\", WhseShptHeaderParam.\"No.\");\n+ OnPostUpdateWhseDocumentsOnAfterWhseShptLineSetFilters(WhseShptLine2, WhseShptHeaderParam);\n if WhseShptLine2.IsEmpty() then begin\n WhseShptHeaderParam.DeleteRelatedLines();\n WhseShptHeaderParam.Delete();\n@@ -873,6 +874,11 @@ codeunit 5763 \"Whse.-Post Shipment\"\n begin\n end;\n \n+ [IntegrationEvent(false, false)]\n+ local procedure OnPostUpdateWhseDocumentsOnAfterWhseShptLineSetFilters(var WhseShptLine2: Record \"Warehouse Shipment Line\"; var WhseShptHeaderParam: Record \"Warehouse Shipment Header\")\n+ begin\n+ end;\n+\n [IntegrationEvent(false, false)]\n local procedure OnAfterSetCurrentKeyForWhseShptLine(var WarehouseShipmentLine: Record \"Warehouse Shipment Line\");\n begin\n","expected":[{"text":"In codeunit 5763 \"Whse.-Post Shipment\", Added integration event OnPostUpdateWhseDocumentsOnAfterWhseShptLineSetFilters in or for \"PostUpdateWhseDocuments\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\nWhseShptLine2.SetRange(\"No.\", CurrWarehouseShipmentHeader.\"No.\");\n WhseShptLine2.SetRange(\"Source Type\", DATABASE::\"Sales Line\");\n OnPostUpdateWhseDocumentsOnAfterWhseShptLineSetFilters(WhseShptLine2, WhsePostParameters);\n if WhseShptLine2.FindSet() then\n```","level":"critical"},{"text":"In codeunit 5763 \"Whse.-Post Shipment\", Integration event publisher in or for \"OnPostUpdateWhseDocumentsOnAfterWhseShptLineSetFilters\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\n[IntegrationEvent(false, false)]\n local procedure OnPostUpdateWhseDocumentsOnAfterWhseShptLineSetFilters(var WhseShptLine2: Record \"Warehouse Shipment Line\"; var WhsePostParameters: Record \"Whse. Post Parameters\")\n begin\n end;\n```","level":"critical"},{"text":"The change is applied to exactly 1 affected .al file(s) across these layers: W1. The affected files are: App/Layers/W1/BaseApp/Warehouse/Document/WhsePostShipment.Codeunit.al.","level":"critical"},{"text":"The implementation is limited to the requested extensibility change and does not modify unrelated application behavior or files.","level":"expected"}]} +{"metadata":{"area":"warehouse"},"repo":"microsoftInternal/NAV","instance_id":"microsoftInternal__NAV-Ext_Request_Impl-30237","base_commit":"f7e26eba1bf2a4a87f8104373ca7519f792467f8","created_at":"2026-06-17","environment_setup_version":"28.0","project_paths":["App/Layers/W1/BaseApp"],"patch":"diff --git a/App/Layers/W1/BaseApp/Warehouse/Request/GetOutboundSourceDocuments.Report.al b/App/Layers/W1/BaseApp/Warehouse/Request/GetOutboundSourceDocuments.Report.al\nindex bbeafaaaa9a..486a0972256 100644\n--- a/App/Layers/W1/BaseApp/Warehouse/Request/GetOutboundSourceDocuments.Report.al\n+++ b/App/Layers/W1/BaseApp/Warehouse/Request/GetOutboundSourceDocuments.Report.al\n@@ -262,8 +262,15 @@ report 7304 \"Get Outbound Source Documents\"\n Location.Get(LocationCode2);\n end;\n \n- local procedure IsPickToBeMadeForAsmLine(AsmLine: Record \"Assembly Line\"): Boolean\n+ local procedure IsPickToBeMadeForAsmLine(AsmLine: Record \"Assembly Line\") Result: Boolean\n+ var\n+ IsHandled: Boolean;\n begin\n+ IsHandled := false;\n+ OnBeforeIsPickToBeMadeForAsmLine(AsmLine, Result, IsHandled);\n+ if IsHandled then\n+ exit(Result);\n+\n if not AsmLine.IsInventoriableItem() then\n exit(false);\n \n@@ -308,6 +315,11 @@ report 7304 \"Get Outbound Source Documents\"\n begin\n end;\n \n+ [IntegrationEvent(false, false)]\n+ local procedure OnBeforeIsPickToBeMadeForAsmLine(AssemblyLine: Record \"Assembly Line\"; var Result: Boolean; var IsHandled: Boolean)\n+ begin\n+ end;\n+\n [IntegrationEvent(false, false)]\n local procedure OnBeforeWhsePickRequestOnAfterGetRecord(var WhsePickRequest: Record \"Whse. Pick Request\"; PickWkshTemplate: Code[10]; PickWkshName: Code[10]; LocationCode: Code[10]; var LineCreated: Boolean; var SkipRecord: Boolean)\n begin\n","expected":[{"text":"In report 7304 \"Get Outbound Source Documents\", Added integration event OnBeforeIsPickToBeMadeForAsmLine in or for \"IsPickToBeMadeForAsmLine\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\nbegin\n IsHandled := false;\n OnBeforeIsPickToBeMadeForAsmLine(AsmLine, Result, IsHandled);\n if IsHandled then\n exit(Result);\n```","level":"critical"},{"text":"In report 7304 \"Get Outbound Source Documents\", Integration event publisher in or for \"OnBeforeIsPickToBeMadeForAsmLine\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\n[IntegrationEvent(false, false)]\n local procedure OnBeforeIsPickToBeMadeForAsmLine(AssemblyLine: Record \"Assembly Line\"; var Result: Boolean; var IsHandled: Boolean)\n begin\n end;\n```","level":"critical"},{"text":"The change is applied to exactly 1 affected .al file(s) across these layers: W1. The affected files are: App/Layers/W1/BaseApp/Warehouse/Request/GetOutboundSourceDocuments.Report.al.","level":"critical"},{"text":"The implementation is limited to the requested extensibility change and does not modify unrelated application behavior or files.","level":"expected"}]} +{"metadata":{"area":"manufacturing"},"repo":"microsoftInternal/NAV","instance_id":"microsoftInternal__NAV-Ext_Request_Impl-30083","base_commit":"14671601068a7613c454b163111b55243b3e251a","created_at":"2026-05-25","environment_setup_version":"28.0","project_paths":["App/Layers/W1/BaseApp"],"patch":"diff --git a/App/Layers/W1/BaseApp/Manufacturing/Reports/ProdOrderShortageList.Report.al b/App/Layers/W1/BaseApp/Manufacturing/Reports/ProdOrderShortageList.Report.al\nindex be8ab54a6fc..c8a7032b0e1 100644\n--- a/App/Layers/W1/BaseApp/Manufacturing/Reports/ProdOrderShortageList.Report.al\n+++ b/App/Layers/W1/BaseApp/Manufacturing/Reports/ProdOrderShortageList.Report.al\n@@ -300,6 +300,8 @@ report 99000788 \"Prod. Order - Shortage List\"\n CompItem.\"Scheduled Receipt (Qty.)\" -\n CompItem.Inventory;\n \n+ OnOnAfterGetRecordOnAfterCalculateNeededQty(\"Prod. Order Component\", TempProdOrderLine, TempProdOrderComp, CompItem, NeededQty);\n+\n if NeededQty < 0 then\n NeededQty := 0;\n \n@@ -472,5 +474,10 @@ report 99000788 \"Prod. Order - Shortage List\"\n ProdOrderCompFields.\"Remaining Qty. (Base)\" := RemainingQtyBase;\n ProdOrderCompFields.\"Reserved Qty. (Base)\" := ReservedQtyBase;\n end;\n+\n+ [IntegrationEvent(false, false)]\n+ local procedure OnOnAfterGetRecordOnAfterCalculateNeededQty(ProdOrderComponent: Record \"Prod. Order Component\"; var TempProdOrderLine: Record \"Prod. Order Line\" temporary; var TempProdOrderComponent: Record \"Prod. Order Component\" temporary; var Item: Record Item; var NeededQty: Decimal)\n+ begin\n+ end;\n }\n \n","expected":[{"text":"In report 99000788 \"Prod. Order - Shortage List\", Added event call OnOnAfterGetRecordOnAfterCalculateNeededQty after NeededQty calculation in or for \"OnAfterGetRecord (dataitem \"Prod. Order Component\")\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\nNeededQty :=\n CompItem.\"Qty. on Component Lines\" +\n CompItem.\"Qty. on Sales Order\" -\n CompItem.\"Qty. on Purch. Order\" -\n CompItem.\"Scheduled Receipt (Qty.)\" -\n CompItem.Inventory;\n\nOnOnAfterGetRecordOnAfterCalculateNeededQty(\"Prod. Order Component\", TempProdOrderLine, TempProdOrderComp, CompItem, NeededQty, RemainingQty, QtyOnHandAfterProd);\n\nif NeededQty < 0 then\n NeededQty := 0;\n```","level":"critical"},{"text":"In report 99000788 \"Prod. Order - Shortage List\", New integration event OnOnAfterGetRecordOnAfterCalculateNeededQty in or for \"Event Publisher\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\n[IntegrationEvent(false, false)]\nlocal procedure OnOnAfterGetRecordOnAfterCalculateNeededQty(ProdOrderComponent: Record \"Prod. Order Component\"; var TempProdOrderLine: Record \"Prod. Order Line\" temporary; var TempProdOrderComponent: Record \"Prod. Order Component\" temporary; var Item: Record Item; var NeededQty: Decimal; var RemainingQty: Decimal; var QtyOnHandAfterProd: Decimal)\nbegin\nend;\n```","level":"critical"},{"text":"The change is applied to exactly 1 affected .al file(s) across these layers: W1. The affected files are: App/Layers/W1/BaseApp/Manufacturing/Reports/ProdOrderShortageList.Report.al.","level":"critical"},{"text":"The implementation is limited to the requested extensibility change and does not modify unrelated application behavior or files.","level":"expected"}]} +{"metadata":{"area":"manufacturing"},"repo":"microsoftInternal/NAV","instance_id":"microsoftInternal__NAV-Ext_Request_Impl-29987","base_commit":"97177510ef6bae4a2e01919b0b4cdc1e3bf1bb2f","created_at":"2026-04-30","environment_setup_version":"28.0","project_paths":["App/Layers/W1/BaseApp"],"patch":"diff --git a/App/Layers/W1/BaseApp/Manufacturing/Document/ProdOrderStatusManagement.Codeunit.al b/App/Layers/W1/BaseApp/Manufacturing/Document/ProdOrderStatusManagement.Codeunit.al\nindex 62b1e0715ea..7e96966254a 100644\n--- a/App/Layers/W1/BaseApp/Manufacturing/Document/ProdOrderStatusManagement.Codeunit.al\n+++ b/App/Layers/W1/BaseApp/Manufacturing/Document/ProdOrderStatusManagement.Codeunit.al\n@@ -180,7 +180,7 @@ codeunit 5407 \"Prod. Order Status Management\"\n exit(ConfirmManagement.GetResponseOrDefault(StrSubstNo(CanReOpenFinishedProdOrderQst, ProdOrder.\"No.\"), true));\n end;\n \n- local procedure ProcessProdOrderForReopen(var ProdOrder: Record \"Production Order\")\n+ procedure ProcessProdOrderForReopen(var ProdOrder: Record \"Production Order\")\n var\n ProdOrderLine: Record \"Prod. Order Line\";\n begin\n","expected":[{"text":"In codeunit 5407 \"Prod. Order Status Management\", Added integration event ProcessProdOrderForReopen in or for \"ReopenFinishedProdOrder\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\nError('');\n\n ProcessProdOrderForReopen(ProdOrder);\n ShowReleasedProdOrderDocument(ProdOrder);\n FeatureTelemetry.LogUsage('0000OHY', GetFeatureTelemetryName(), StrSubstNo(ReopenedProductionOrderLbl, ProdOrder.\"No.\"));\n end;\n```","level":"critical"},{"text":"In codeunit 5407 \"Prod. Order Status Management\", Procedure declaration in or for \"ProcessProdOrderForReopen\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\nend;\n\n local procedure ProcessProdOrderForReopen(var ProdOrder: Record \"Production Order\")\n var\n ProdOrderLine: Record \"Prod. Order Line\";\n begin\n```","level":"critical"},{"text":"The change is applied to exactly 1 affected .al file(s) across these layers: W1. The affected files are: App/Layers/W1/BaseApp/Manufacturing/Document/ProdOrderStatusManagement.Codeunit.al.","level":"critical"},{"text":"The implementation is limited to the requested extensibility change and does not modify unrelated application behavior or files.","level":"expected"}]} +{"metadata":{"area":"inventory"},"repo":"microsoftInternal/NAV","instance_id":"microsoftInternal__NAV-Ext_Request_Impl-29968","base_commit":"97177510ef6bae4a2e01919b0b4cdc1e3bf1bb2f","created_at":"2026-04-23","environment_setup_version":"28.0","project_paths":["App/Layers/W1/BaseApp"],"patch":"diff --git a/App/Layers/W1/BaseApp/Inventory/Tracking/MatchedOrderLines.Page.al b/App/Layers/W1/BaseApp/Inventory/Tracking/MatchedOrderLines.Page.al\nindex 54f93f34e22..ee08e08ef7e 100644\n--- a/App/Layers/W1/BaseApp/Inventory/Tracking/MatchedOrderLines.Page.al\n+++ b/App/Layers/W1/BaseApp/Inventory/Tracking/MatchedOrderLines.Page.al\n@@ -292,7 +292,7 @@ page 5818 \"Matched Order Lines\"\n LevelStyleExpr: Text;\n MatchedOrderLinesTok: Label 'Matched Order Lines', Locked = true;\n \n- internal procedure InitializePage(MatchedOrderLineSource2: Enum \"Matched Order Line Source\"; ShowFromHeader2: Boolean; SourceRecordSystemId2: Guid)\n+ procedure InitializePage(MatchedOrderLineSource2: Enum \"Matched Order Line Source\"; ShowFromHeader2: Boolean; SourceRecordSystemId2: Guid)\n begin\n MatchedOrderLineSource := MatchedOrderLineSource2;\n ShowFromHeader := ShowFromHeader2;\n","expected":[{"text":"In page 5818 \"Matched Order Lines\", Procedure declaration in or for \"InitializePage\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\nMatchedOrderLinesTok: Label 'Matched Order Lines', Locked = true;\n\n internal procedure InitializePage(MatchedOrderLineSource2: Enum \"Matched Order Line Source\"; ShowFromHeader2: Boolean; SourceRecordSystemId2: Guid)\n begin\n```","level":"critical"},{"text":"The change is applied to exactly 1 affected .al file(s) across these layers: W1. The affected files are: App/Layers/W1/BaseApp/Inventory/Tracking/MatchedOrderLines.Page.al.","level":"critical"},{"text":"The implementation is limited to the requested extensibility change and does not modify unrelated application behavior or files.","level":"expected"}]} +{"metadata":{"area":"localization"},"repo":"microsoftInternal/NAV","instance_id":"microsoftInternal__NAV-Ext_Request_Impl-29873","base_commit":"4d5364fe9db538581afa951a8c10d8ea027a3561","created_at":"2026-03-26","environment_setup_version":"28.0","project_paths":["App/Layers/W1/BaseApp"],"patch":"diff --git a/App/Layers/ES/BaseApp/Local/Sales/Receivables/BatchSettlPostedBillGrs.Report.al b/App/Layers/ES/BaseApp/Local/Sales/Receivables/BatchSettlPostedBillGrs.Report.al\nindex 94b7668745e..3f42543db09 100644\n--- a/App/Layers/ES/BaseApp/Local/Sales/Receivables/BatchSettlPostedBillGrs.Report.al\n+++ b/App/Layers/ES/BaseApp/Local/Sales/Receivables/BatchSettlPostedBillGrs.Report.al\n@@ -356,8 +356,6 @@ report 7000086 \"Batch Settl. Posted Bill Grs.\"\n CarteraManagement: Codeunit CarteraManagement;\n GenJnlPostLine: Codeunit \"Gen. Jnl.-Post Line\";\n Window: Dialog;\n- PostingDate: Date;\n- DueOnly: Boolean;\n Delay: Decimal;\n SourceCode: Code[10];\n Acct: Code[20];\n@@ -379,6 +377,10 @@ report 7000086 \"Batch Settl. Posted Bill Grs.\"\n NoRealVATBuffer: Record \"BG/PO Post. Buffer\" temporary;\n ExistsNoRealVAT: Boolean;\n \n+ protected var\n+ PostingDate: Date;\n+ DueOnly: Boolean;\n+\n [Scope('OnPrem')]\n procedure DiscFactLiabs(PostedDoc2: Record \"Posted Cartera Doc.\")\n var\n","expected":[{"text":"In report 7000086 \"Batch Settl. Posted Bill Grs.\", Made PostingDate and DueOnly variables protected for report extension access in or for \"var section\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\nprotected var\n PostingDate: Date;\n DueOnly: Boolean;\n```","level":"critical"},{"text":"The change is applied to exactly 1 affected .al file(s) across these layers: ES. The affected files are: App/Layers/ES/BaseApp/Local/Sales/Receivables/BatchSettlPostedBillGrs.Report.al.","level":"critical"},{"text":"The implementation is limited to the requested extensibility change and does not modify unrelated application behavior or files.","level":"expected"}]} +{"metadata":{"area":"purchases"},"repo":"microsoftInternal/NAV","instance_id":"microsoftInternal__NAV-Ext_Request_Impl-29803","base_commit":"4d5364fe9db538581afa951a8c10d8ea027a3561","created_at":"2026-03-11","environment_setup_version":"28.0","project_paths":["App/Layers/W1/BaseApp"],"patch":"diff --git a/App/Layers/W1/BaseApp/Purchases/Vendor/OrderAddress.Table.al b/App/Layers/W1/BaseApp/Purchases/Vendor/OrderAddress.Table.al\nindex 50f4cb27e10..c9e14231a5c 100644\n--- a/App/Layers/W1/BaseApp/Purchases/Vendor/OrderAddress.Table.al\n+++ b/App/Layers/W1/BaseApp/Purchases/Vendor/OrderAddress.Table.al\n@@ -211,6 +211,8 @@ table 224 \"Order Address\"\n Text000: Label 'untitled';\n #pragma warning restore AA0074\n Vend: Record Vendor;\n+\n+ protected var\n PostCode: Record \"Post Code\";\n \n procedure Caption(): Text\n","expected":[{"text":"In table 224 \"Order Address\", Added integration event PostCode in or for \"trigger OnLookup\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\ntrigger OnLookup()\n begin\n OnBeforeLookupCity(Rec, PostCode);\n LookupPostCode(Rec.FieldNo(City));\n end;\n```","level":"critical"},{"text":"In table 224 \"Order Address\", Integration event publisher in or for \"PostCode\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\nend;\n\n local procedure LookupPostCode(FieldNo: Integer)\n begin\n```","level":"critical"},{"text":"The change is applied to exactly 1 affected .al file(s) across these layers: W1. The affected files are: App/Layers/W1/BaseApp/Purchases/Vendor/OrderAddress.Table.al.","level":"critical"},{"text":"The implementation is limited to the requested extensibility change and does not modify unrelated application behavior or files.","level":"expected"}]} +{"metadata":{"area":"warehouse"},"repo":"microsoftInternal/NAV","instance_id":"microsoftInternal__NAV-Ext_Request_Impl-30069","base_commit":"14671601068a7613c454b163111b55243b3e251a","created_at":"2026-05-19","environment_setup_version":"28.0","project_paths":["App/Layers/W1/BaseApp"],"patch":"diff --git a/App/Layers/W1/BaseApp/Warehouse/Activity/CreatePick.Codeunit.al b/App/Layers/W1/BaseApp/Warehouse/Activity/CreatePick.Codeunit.al\nindex 9263b3377f5..01ec163fb4f 100644\n--- a/App/Layers/W1/BaseApp/Warehouse/Activity/CreatePick.Codeunit.al\n+++ b/App/Layers/W1/BaseApp/Warehouse/Activity/CreatePick.Codeunit.al\n@@ -123,6 +123,11 @@ codeunit 7312 \"Create Pick\"\n NewQtyToHandle: Decimal;\n IsHandled: Boolean;\n begin\n+ IsHandled := false;\n+ OnBeforeCreateTempLine(LocationCode, ItemNo, VariantCode, IsHandled);\n+ if IsHandled then\n+ exit;\n+\n TotalQtyPickedBase := 0;\n GetLocation(LocationCode);\n \n@@ -1174,6 +1179,7 @@ codeunit 7312 \"Create Pick\"\n ToQtyToPickBase: Decimal;\n QtyAvailableBase: Decimal;\n TotalAvailQtyToPickBase: Decimal;\n+ IsHandled: Boolean;\n begin\n // Directed put-away and pick\n TotalAvailQtyToPickBase :=\n@@ -1206,43 +1212,49 @@ codeunit 7312 \"Create Pick\"\n ItemUnitOfMeasure.Ascending(false);\n if ItemUnitOfMeasure.Find('-') then\n repeat\n- if GetBinContent(\n- FromBinContent, ItemNo, VariantCode, ItemUnitOfMeasure.Code, LocationCode, ToBinCode, IsCrossDock,\n- IsMovementWorksheet, WhseItemTrkgExists, false, true, WhseItemTrackingSetup, TotalQtytoPick, TotalQtytoPickBase)\n- then\n- repeat\n- if (FromBinContent.\"Bin Code\" <> ToBinCode) and\n- ((UseForPick(FromBinContent) and (not IsMovementWorksheet)) or\n- (UseForReplenishment(FromBinContent) and IsMovementWorksheet))\n- then begin\n- CalcBinAvailQtyFromSmallerUOM(QtyAvailableBase, FromBinContent, false, WhseItemTrackingSetup);\n-\n- OnCalcAvailQtyOnFindSmallerUOMBin(\n- false, ItemNo, VariantCode,\n- WhseItemTrackingSetup.\"Serial No. Required\", WhseItemTrackingSetup.\"Lot No. Required\", WhseItemTrkgExists,\n- TempWhseItemTrackingLine2.\"Lot No.\", TempWhseItemTrackingLine2.\"Serial No.\",\n- FromBinContent.\"Location Code\", FromBinContent.\"Bin Code\",\n- CurrSourceType, CurrSourceSubType, CurrSourceNo, CurrSourceLineNo, CurrSourceSubLineNo, TotalQtytoPickBase, QtyAvailableBase,\n- WhseItemTrackingSetup);\n-\n- if QtyAvailableBase > 0 then begin\n- UpdateQuantitiesToPick(\n- QtyAvailableBase,\n- ItemUnitOfMeasure.\"Qty. per Unit of Measure\", FromQtyToPick, FromQtyToPickBase,\n- QtyPerUnitOfMeasure, ToQtyToPick, ToQtyToPickBase,\n- TotalQtytoPick, TotalQtytoPickBase);\n-\n- CreateTempActivityLine(\n- LocationCode, FromBinContent.\"Bin Code\", FromBinContent.\"Unit of Measure Code\",\n- ItemUnitOfMeasure.\"Qty. per Unit of Measure\", FromQtyToPick, FromQtyToPickBase, 1, 0, QtyRndPrec, QtyRndPrecBase);\n- CreateTempActivityLine(\n- LocationCode, ToBinCode, UnitofMeasureCode,\n- QtyPerUnitOfMeasure, ToQtyToPick, ToQtyToPickBase, 2, 0, QtyRndPrec, QtyRndPrecBase);\n-\n- TotalAvailQtyToPickBase := TotalAvailQtyToPickBase - ToQtyToPickBase;\n+ IsHandled := false;\n+ OnFindSmallerUOMBinOnBeforeGetBinContent(\n+ LocationCode, ItemNo, VariantCode, ItemUnitOfMeasure, ToBinCode, IsCrossDock,\n+ QtyPerUnitOfMeasure, TotalQtytoPick, TotalQtytoPickBase, TotalAvailQtyToPickBase,\n+ TempWhseItemTrackingLine2, WhseItemTrackingSetup, IsHandled);\n+ if not IsHandled then\n+ if GetBinContent(\n+ FromBinContent, ItemNo, VariantCode, ItemUnitOfMeasure.Code, LocationCode, ToBinCode, IsCrossDock,\n+ IsMovementWorksheet, WhseItemTrkgExists, false, true, WhseItemTrackingSetup, TotalQtytoPick, TotalQtytoPickBase)\n+ then\n+ repeat\n+ if (FromBinContent.\"Bin Code\" <> ToBinCode) and\n+ ((UseForPick(FromBinContent) and (not IsMovementWorksheet)) or\n+ (UseForReplenishment(FromBinContent) and IsMovementWorksheet))\n+ then begin\n+ CalcBinAvailQtyFromSmallerUOM(QtyAvailableBase, FromBinContent, false, WhseItemTrackingSetup);\n+\n+ OnCalcAvailQtyOnFindSmallerUOMBin(\n+ false, ItemNo, VariantCode,\n+ WhseItemTrackingSetup.\"Serial No. Required\", WhseItemTrackingSetup.\"Lot No. Required\", WhseItemTrkgExists,\n+ TempWhseItemTrackingLine2.\"Lot No.\", TempWhseItemTrackingLine2.\"Serial No.\",\n+ FromBinContent.\"Location Code\", FromBinContent.\"Bin Code\",\n+ CurrSourceType, CurrSourceSubType, CurrSourceNo, CurrSourceLineNo, CurrSourceSubLineNo, TotalQtytoPickBase, QtyAvailableBase,\n+ WhseItemTrackingSetup);\n+\n+ if QtyAvailableBase > 0 then begin\n+ UpdateQuantitiesToPick(\n+ QtyAvailableBase,\n+ ItemUnitOfMeasure.\"Qty. per Unit of Measure\", FromQtyToPick, FromQtyToPickBase,\n+ QtyPerUnitOfMeasure, ToQtyToPick, ToQtyToPickBase,\n+ TotalQtytoPick, TotalQtytoPickBase);\n+\n+ CreateTempActivityLine(\n+ LocationCode, FromBinContent.\"Bin Code\", FromBinContent.\"Unit of Measure Code\",\n+ ItemUnitOfMeasure.\"Qty. per Unit of Measure\", FromQtyToPick, FromQtyToPickBase, 1, 0, QtyRndPrec, QtyRndPrecBase);\n+ CreateTempActivityLine(\n+ LocationCode, ToBinCode, UnitofMeasureCode,\n+ QtyPerUnitOfMeasure, ToQtyToPick, ToQtyToPickBase, 2, 0, QtyRndPrec, QtyRndPrecBase);\n+\n+ TotalAvailQtyToPickBase := TotalAvailQtyToPickBase - ToQtyToPickBase;\n+ end;\n end;\n- end;\n- until (FromBinContent.Next() = 0) or (TotalQtytoPickBase = 0);\n+ until (FromBinContent.Next() = 0) or (TotalQtytoPickBase = 0);\n \n if TotalQtytoPickBase > 0 then\n if BreakBulkPlacingExists(TempFromBinContent, ItemNo, LocationCode, ItemUnitOfMeasure.Code, VariantCode, IsCrossDock, WhseItemTrackingSetup) then\n@@ -1849,36 +1861,40 @@ codeunit 7312 \"Create Pick\"\n WarehouseActivityLine.\"Source Document\" := WhseManagement.GetWhseActivSourceDocument(WarehouseActivityLine.\"Source Type\", WarehouseActivityLine.\"Source Subtype\");\n \n TempWarehouseActivityLine.Delete();\n- if PickQtyBase > 0 then begin\n- TempWarehouseActivityLine3.Copy(TempWarehouseActivityLine);\n- TempWarehouseActivityLine.SetRange(\n- \"Unit of Measure Code\", WarehouseActivityLine.\"Unit of Measure Code\");\n- TempWarehouseActivityLine.SetFilter(\"Line No.\", '>%1', TempWarehouseActivityLine.\"Line No.\");\n- TempWarehouseActivityLine.SetRange(\"No.\", TempWarehouseActivityLine2.\"No.\");\n- TempWarehouseActivityLine.SetRange(\"Bin Code\", WarehouseActivityLine.\"Bin Code\");\n- OnCreateWhseDocPlaceLineOnAfterTempWhseActivLineSetFilters(TempWarehouseActivityLine, WarehouseActivityLine);\n- if TempWarehouseActivityLine.Find('-') then\n- repeat\n- if TempWarehouseActivityLine.\"Qty. (Base)\" >= PickQtyBase then begin\n- WarehouseActivityLine.Quantity := WarehouseActivityLine.Quantity + PickQty;\n- WarehouseActivityLine.\"Qty. (Base)\" := WarehouseActivityLine.\"Qty. (Base)\" + PickQtyBase;\n- TempWarehouseActivityLine.Quantity -= PickQty;\n- TempWarehouseActivityLine.\"Qty. (Base)\" -= PickQtyBase;\n- TempWarehouseActivityLine.Modify();\n- PickQty := 0;\n- PickQtyBase := 0;\n- end else begin\n- WarehouseActivityLine.Quantity := WarehouseActivityLine.Quantity + TempWarehouseActivityLine.Quantity;\n- WarehouseActivityLine.\"Qty. (Base)\" := WarehouseActivityLine.\"Qty. (Base)\" + TempWarehouseActivityLine.\"Qty. (Base)\";\n- PickQty := PickQty - TempWarehouseActivityLine.Quantity;\n- PickQtyBase := PickQtyBase - TempWarehouseActivityLine.\"Qty. (Base)\";\n- TempWarehouseActivityLine.Delete();\n- end;\n- until (TempWarehouseActivityLine.Next() = 0) or (PickQtyBase = 0)\n- else\n- if TempWarehouseActivityLine.Delete() then;\n- TempWarehouseActivityLine.Copy(TempWarehouseActivityLine3);\n- end;\n+\n+ IsHandled := false;\n+ OnCreateWhseDocPlaceLineOnBeforeHandleRemainingPickQty(WarehouseActivityLine, PickQty, PickQtyBase, LineNo, IsHandled);\n+ if not IsHandled then\n+ if PickQtyBase > 0 then begin\n+ TempWarehouseActivityLine3.Copy(TempWarehouseActivityLine);\n+ TempWarehouseActivityLine.SetRange(\n+ \"Unit of Measure Code\", WarehouseActivityLine.\"Unit of Measure Code\");\n+ TempWarehouseActivityLine.SetFilter(\"Line No.\", '>%1', TempWarehouseActivityLine.\"Line No.\");\n+ TempWarehouseActivityLine.SetRange(\"No.\", TempWarehouseActivityLine2.\"No.\");\n+ TempWarehouseActivityLine.SetRange(\"Bin Code\", WarehouseActivityLine.\"Bin Code\");\n+ OnCreateWhseDocPlaceLineOnAfterTempWhseActivLineSetFilters(TempWarehouseActivityLine, WarehouseActivityLine);\n+ if TempWarehouseActivityLine.Find('-') then\n+ repeat\n+ if TempWarehouseActivityLine.\"Qty. (Base)\" >= PickQtyBase then begin\n+ WarehouseActivityLine.Quantity := WarehouseActivityLine.Quantity + PickQty;\n+ WarehouseActivityLine.\"Qty. (Base)\" := WarehouseActivityLine.\"Qty. (Base)\" + PickQtyBase;\n+ TempWarehouseActivityLine.Quantity -= PickQty;\n+ TempWarehouseActivityLine.\"Qty. (Base)\" -= PickQtyBase;\n+ TempWarehouseActivityLine.Modify();\n+ PickQty := 0;\n+ PickQtyBase := 0;\n+ end else begin\n+ WarehouseActivityLine.Quantity := WarehouseActivityLine.Quantity + TempWarehouseActivityLine.Quantity;\n+ WarehouseActivityLine.\"Qty. (Base)\" := WarehouseActivityLine.\"Qty. (Base)\" + TempWarehouseActivityLine.\"Qty. (Base)\";\n+ PickQty := PickQty - TempWarehouseActivityLine.Quantity;\n+ PickQtyBase := PickQtyBase - TempWarehouseActivityLine.\"Qty. (Base)\";\n+ TempWarehouseActivityLine.Delete();\n+ end;\n+ until (TempWarehouseActivityLine.Next() = 0) or (PickQtyBase = 0)\n+ else\n+ if TempWarehouseActivityLine.Delete() then;\n+ TempWarehouseActivityLine.Copy(TempWarehouseActivityLine3);\n+ end;\n \n if WarehouseActivityLine.Quantity > 0 then begin\n TempWarehouseActivityLine3 := WarehouseActivityLine;\n@@ -4694,6 +4710,21 @@ codeunit 7312 \"Create Pick\"\n begin\n end;\n \n+ [IntegrationEvent(false, false)]\n+ local procedure OnCreateWhseDocPlaceLineOnBeforeHandleRemainingPickQty(var WarehouseActivityLine: Record \"Warehouse Activity Line\"; var PickQty: Decimal; var PickQtyBase: Decimal; LineNo: Integer; var IsHandled: Boolean)\n+ begin\n+ end;\n+\n+ [IntegrationEvent(false, false)]\n+ local procedure OnFindSmallerUOMBinOnBeforeGetBinContent(LocationCode: Code[10]; ItemNo: Code[20]; VariantCode: Code[10]; var ItemUnitOfMeasure: Record \"Item Unit of Measure\"; ToBinCode: Code[20]; IsCrossDock: Boolean; QtyPerUnitOfMeasure: Decimal; var TotalQtytoPick: Decimal; var TotalQtytoPickBase: Decimal; var TotalAvailQtyToPickBase: Decimal; var TempWhseItemTrackingLine2: Record \"Whse. Item Tracking Line\" temporary; WhseItemTrackingSetup: Record \"Item Tracking Setup\"; var IsHandled: Boolean)\n+ begin\n+ end;\n+\n+ [IntegrationEvent(false, false)]\n+ local procedure OnBeforeCreateTempLine(LocationCode: Code[10]; ItemNo: Code[20]; VariantCode: Code[10]; var IsHandled: Boolean)\n+ begin\n+ end;\n+\n [IntegrationEvent(false, false)]\n local procedure OnBeforeGetBinContent(\n var TempBinContent: Record \"Bin Content\" temporary;\n","expected":[{"text":"In codeunit 7312 \"Create Pick\", Added integration event OnCreateWhseDocPlaceLineOnBeforeHandleRemainingPickQty in or for \"CreateWhseDocPlaceLine\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\nIsHandled := false;\n OnCreateWhseDocPlaceLineOnBeforeHandleRemainingPickQty(WarehouseActivityLine, PickQty, PickQtyBase, LineNo, IsHandled);\n if not IsHandled then\n if PickQtyBase > 0 then begin\n TempWarehouseActivityLine3.Copy(TempWarehouseActivityLine);\n```","level":"critical"},{"text":"In codeunit 7312 \"Create Pick\", Integration event publisher in or for \"OnCreateWhseDocPlaceLineOnBeforeHandleRemainingPickQty\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\n[IntegrationEvent(false, false)]\n local procedure OnCreateWhseDocPlaceLineOnBeforeHandleRemainingPickQty(var WarehouseActivityLine: Record \"Warehouse Activity Line\"; var PickQty: Decimal; var PickQtyBase: Decimal; LineNo: Integer; var IsHandled: Boolean)\n begin\n end;\n```","level":"critical"},{"text":"In codeunit 7312 \"Create Pick\", Added integration event OnCreateWhseDocPlaceLineOnAfterTempWhseActivLineSetFilters in or for \"CreateWhseDocPlaceLine\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\nTempWarehouseActivityLine.SetRange(\"No.\", TempWarehouseActivityLine2.\"No.\");\n TempWarehouseActivityLine.SetRange(\"Bin Code\", WarehouseActivityLine.\"Bin Code\");\n OnCreateWhseDocPlaceLineOnAfterTempWhseActivLineSetFilters(TempWarehouseActivityLine, WarehouseActivityLine);\n if TempWarehouseActivityLine.Find('-') then\n repeat\n if TempWarehouseActivityLine.\"Qty. (Base)\" >= PickQtyBase then begin\n```","level":"critical"},{"text":"In codeunit 7312 \"Create Pick\", Integration event publisher in or for \"OnCreateWhseDocPlaceLineOnAfterTempWhseActivLineSetFilters\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\n[IntegrationEvent(false, false)]\n local procedure OnCreateWhseDocPlaceLineOnAfterTempWhseActivLineSetFilters(var TempWhseActivLine: Record \"Warehouse Activity Line\"; WhseActivLine: Record \"Warehouse Activity Line\")\n begin\n end;\n```","level":"critical"},{"text":"The change is applied to exactly 1 affected .al file(s) across these layers: W1. The affected files are: App/Layers/W1/BaseApp/Warehouse/Activity/CreatePick.Codeunit.al.","level":"critical"},{"text":"The implementation is limited to the requested extensibility change and does not modify unrelated application behavior or files.","level":"expected"}]} +{"metadata":{"area":"inventory"},"repo":"microsoftInternal/NAV","instance_id":"microsoftInternal__NAV-Ext_Request_Impl-30252","base_commit":"f7e26eba1bf2a4a87f8104373ca7519f792467f8","created_at":"2026-06-23","environment_setup_version":"28.0","project_paths":["App/Layers/W1/BaseApp"],"patch":"diff --git a/App/Layers/IT/BaseApp/Inventory/Requisition/ReqWkshMakeOrder.Codeunit.al b/App/Layers/IT/BaseApp/Inventory/Requisition/ReqWkshMakeOrder.Codeunit.al\nindex 1dd5f6e04be..e2c80760c75 100644\n--- a/App/Layers/IT/BaseApp/Inventory/Requisition/ReqWkshMakeOrder.Codeunit.al\n+++ b/App/Layers/IT/BaseApp/Inventory/Requisition/ReqWkshMakeOrder.Codeunit.al\n@@ -525,6 +525,8 @@ codeunit 333 \"Req. Wksh.-Make Order\"\n TempFailedReqLine,\n TempDocumentEntry);\n ReqWkshMakeOrders.SetSuppressCommit(SuppressCommit);\n+ \n+ OnTryCarryOutReqLineActionOnBeforeRun(ReqLine);\n if ReqWkshMakeOrders.Run(ReqLine) then begin\n ReqWkshMakeOrders.GetTryParam(\n PurchOrderHeader,\n@@ -535,6 +537,7 @@ codeunit 333 \"Req. Wksh.-Make Order\"\n PrevLocationCode,\n OrderCounter,\n OrderLineCounter);\n+ OnTryCarryOutReqLineActionOnAfterGetTryParam(ReqLine, PurchOrderHeader, LineCount, NextLineNo, PrevPurchCode, PrevShipToCode, PrevLocationCode, OrderCounter, OrderLineCounter);\n \n if PrintPurchOrders and PlanningResiliency then\n if PurchOrderHeader.\"No.\" <> '' then\n@@ -1834,6 +1837,16 @@ codeunit 333 \"Req. Wksh.-Make Order\"\n begin\n end;\n \n+ [IntegrationEvent(false, false)]\n+ local procedure OnTryCarryOutReqLineActionOnBeforeRun(var RequisitionLine: Record \"Requisition Line\")\n+ begin\n+ end;\n+\n+ [IntegrationEvent(false, false)]\n+ local procedure OnTryCarryOutReqLineActionOnAfterGetTryParam(var RequisitionLine: Record \"Requisition Line\"; var PurchaseHeader: Record \"Purchase Header\"; var LineCount: Integer; var NextLineNo: Integer; var PrevPurchCode: Code[10]; var PrevShipToCode: Code[10]; var PrevLocationCode: Code[10]; var OrderCounter: Integer; var OrderLineCounter: Integer)\n+ begin\n+ end;\n+\n [IntegrationEvent(false, false)]\n local procedure OnBeforeCheckLocation(var RequisitionLine: Record \"Requisition Line\"; var IsHandled: Boolean)\n begin\ndiff --git a/App/Layers/NA/BaseApp/Inventory/Requisition/ReqWkshMakeOrder.Codeunit.al b/App/Layers/NA/BaseApp/Inventory/Requisition/ReqWkshMakeOrder.Codeunit.al\nindex f106c4ba2c1..1ee7b534970 100644\n--- a/App/Layers/NA/BaseApp/Inventory/Requisition/ReqWkshMakeOrder.Codeunit.al\n+++ b/App/Layers/NA/BaseApp/Inventory/Requisition/ReqWkshMakeOrder.Codeunit.al\n@@ -537,6 +537,8 @@ codeunit 333 \"Req. Wksh.-Make Order\"\n TempFailedReqLine,\n TempDocumentEntry);\n ReqWkshMakeOrders.SetSuppressCommit(SuppressCommit);\n+ \n+ OnTryCarryOutReqLineActionOnBeforeRun(ReqLine);\n if ReqWkshMakeOrders.Run(ReqLine) then begin\n ReqWkshMakeOrders.GetTryParam(\n PurchOrderHeader,\n@@ -547,6 +549,7 @@ codeunit 333 \"Req. Wksh.-Make Order\"\n PrevLocationCode,\n OrderCounter,\n OrderLineCounter);\n+ OnTryCarryOutReqLineActionOnAfterGetTryParam(ReqLine, PurchOrderHeader, LineCount, NextLineNo, PrevPurchCode, PrevShipToCode, PrevLocationCode, OrderCounter, OrderLineCounter);\n \n if PrintPurchOrders and PlanningResiliency then\n if PurchOrderHeader.\"No.\" <> '' then\n@@ -1874,6 +1877,16 @@ codeunit 333 \"Req. Wksh.-Make Order\"\n begin\n end;\n \n+ [IntegrationEvent(false, false)]\n+ local procedure OnTryCarryOutReqLineActionOnBeforeRun(var RequisitionLine: Record \"Requisition Line\")\n+ begin\n+ end;\n+\n+ [IntegrationEvent(false, false)]\n+ local procedure OnTryCarryOutReqLineActionOnAfterGetTryParam(var RequisitionLine: Record \"Requisition Line\"; var PurchaseHeader: Record \"Purchase Header\"; var LineCount: Integer; var NextLineNo: Integer; var PrevPurchCode: Code[10]; var PrevShipToCode: Code[10]; var PrevLocationCode: Code[10]; var OrderCounter: Integer; var OrderLineCounter: Integer)\n+ begin\n+ end;\n+\n [IntegrationEvent(false, false)]\n local procedure OnBeforeCheckLocation(var RequisitionLine: Record \"Requisition Line\"; var IsHandled: Boolean)\n begin\ndiff --git a/App/Layers/W1/BaseApp/Inventory/Requisition/ReqWkshMakeOrder.Codeunit.al b/App/Layers/W1/BaseApp/Inventory/Requisition/ReqWkshMakeOrder.Codeunit.al\nindex 6c654b07153..c5dd0fe3617 100644\n--- a/App/Layers/W1/BaseApp/Inventory/Requisition/ReqWkshMakeOrder.Codeunit.al\n+++ b/App/Layers/W1/BaseApp/Inventory/Requisition/ReqWkshMakeOrder.Codeunit.al\n@@ -522,6 +522,8 @@ codeunit 333 \"Req. Wksh.-Make Order\"\n TempFailedReqLine,\n TempDocumentEntry);\n ReqWkshMakeOrders.SetSuppressCommit(SuppressCommit);\n+ \n+ OnTryCarryOutReqLineActionOnBeforeRun(ReqLine);\n if ReqWkshMakeOrders.Run(ReqLine) then begin\n ReqWkshMakeOrders.GetTryParam(\n PurchOrderHeader,\n@@ -532,6 +534,7 @@ codeunit 333 \"Req. Wksh.-Make Order\"\n PrevLocationCode,\n OrderCounter,\n OrderLineCounter);\n+ OnTryCarryOutReqLineActionOnAfterGetTryParam(ReqLine, PurchOrderHeader, LineCount, NextLineNo, PrevPurchCode, PrevShipToCode, PrevLocationCode, OrderCounter, OrderLineCounter);\n \n if PrintPurchOrders and PlanningResiliency then\n if PurchOrderHeader.\"No.\" <> '' then\n@@ -1819,6 +1822,16 @@ codeunit 333 \"Req. Wksh.-Make Order\"\n begin\n end;\n \n+ [IntegrationEvent(false, false)]\n+ local procedure OnTryCarryOutReqLineActionOnBeforeRun(var RequisitionLine: Record \"Requisition Line\")\n+ begin\n+ end;\n+\n+ [IntegrationEvent(false, false)]\n+ local procedure OnTryCarryOutReqLineActionOnAfterGetTryParam(var RequisitionLine: Record \"Requisition Line\"; var PurchaseHeader: Record \"Purchase Header\"; var LineCount: Integer; var NextLineNo: Integer; var PrevPurchCode: Code[10]; var PrevShipToCode: Code[10]; var PrevLocationCode: Code[10]; var OrderCounter: Integer; var OrderLineCounter: Integer)\n+ begin\n+ end;\n+\n [IntegrationEvent(false, false)]\n local procedure OnBeforeCheckLocation(var RequisitionLine: Record \"Requisition Line\"; var IsHandled: Boolean)\n begin\n","expected":[{"text":"In codeunit 333 \"Req. Wksh.-Make Order\", Added integration event OnTryCarryOutReqLineActionOnBeforeRun with bypass in or for \"TryCarryOutReqLineAction\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\nReqWkshMakeOrders.SetSuppressCommit(SuppressCommit);\n IsHandled := false;\n Result := false;\n OnTryCarryOutReqLineActionOnBeforeRun(ReqWkshMakeOrders, ReqLine, IsHandled, Result);\n if IsHandled then\n exit(Result);\n\n if ReqWkshMakeOrders.Run(ReqLine) then begin\n```","level":"critical"},{"text":"In codeunit 333 \"Req. Wksh.-Make Order\", Integration event publisher in or for \"OnTryCarryOutReqLineActionOnBeforeRun\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\n[IntegrationEvent(false, false)]\n local procedure OnTryCarryOutReqLineActionOnBeforeRun(var ReqWkshMakeOrders: Codeunit \"Req. Wksh.-Make Order\"; var RequisitionLine: Record \"Requisition Line\"; var IsHandled: Boolean; var Result: Boolean)\n begin\n end;\n```","level":"critical"},{"text":"In codeunit 333 \"Req. Wksh.-Make Order\", Added integration event OnTryCarryOutReqLineActionOnAfterGetTryParam in or for \"TryCarryOutReqLineAction\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\nOrderCounter,\n OrderLineCounter);\n OnTryCarryOutReqLineActionOnAfterGetTryParam(ReqWkshMakeOrders);\n\n if PrintPurchOrders and PlanningResiliency then\n```","level":"critical"},{"text":"In codeunit 333 \"Req. Wksh.-Make Order\", Integration event publisher in or for \"OnTryCarryOutReqLineActionOnAfterGetTryParam\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\n[IntegrationEvent(false, false)]\n local procedure OnTryCarryOutReqLineActionOnAfterGetTryParam(var ReqWkshMakeOrders: Codeunit \"Req. Wksh.-Make Order\")\n begin\n end;\n```","level":"critical"},{"text":"The change is applied to exactly 3 affected .al file(s) across these layers: IT, NA, W1. The affected files are: App/Layers/IT/BaseApp/Inventory/Requisition/ReqWkshMakeOrder.Codeunit.al, App/Layers/NA/BaseApp/Inventory/Requisition/ReqWkshMakeOrder.Codeunit.al, App/Layers/W1/BaseApp/Inventory/Requisition/ReqWkshMakeOrder.Codeunit.al.","level":"critical"},{"text":"The implementation is limited to the requested extensibility change and does not modify unrelated application behavior or files.","level":"expected"}]} +{"metadata":{"area":"warehouse"},"repo":"microsoftInternal/NAV","instance_id":"microsoftInternal__NAV-Ext_Request_Impl-30088","base_commit":"97177510ef6bae4a2e01919b0b4cdc1e3bf1bb2f","created_at":"2026-05-18","environment_setup_version":"28.0","project_paths":["App/Layers/W1/BaseApp"],"patch":"diff --git a/App/Layers/W1/BaseApp/Warehouse/Request/CreateInvtPutawayPickMvmt.Report.al b/App/Layers/W1/BaseApp/Warehouse/Request/CreateInvtPutawayPickMvmt.Report.al\nindex 6896d05ed48..4fccdae494f 100644\n--- a/App/Layers/W1/BaseApp/Warehouse/Request/CreateInvtPutawayPickMvmt.Report.al\n+++ b/App/Layers/W1/BaseApp/Warehouse/Request/CreateInvtPutawayPickMvmt.Report.al\n@@ -342,7 +342,7 @@ report 7323 \"Create Invt Put-away/Pick/Mvmt\"\n until TempWarehouseActivityHeader.Next() = 0;\n end;\n \n- local procedure CheckWhseRequest(var WarehouseRequest: Record \"Warehouse Request\") SkipRecord: Boolean\n+ procedure CheckWhseRequest(var WarehouseRequest: Record \"Warehouse Request\") SkipRecord: Boolean\n var\n SalesHeader: Record \"Sales Header\";\n TransferHeader: Record \"Transfer Header\";\n","expected":[{"text":"In report 7323 \"Create Invt Put-away/Pick/Mvmt\", Added integration event CheckWhseRequest in or for \"trigger OnAfterGetRecord\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\nReadIsolation := IsolationLevel::UpdLock;\n\n if CheckWhseRequest(\"Warehouse Request\") then\n CurrReport.Skip();\n\n if ((Type = Type::Inbound) and (WarehouseActivityHeader.Type <> WarehouseActivityHeader.Type::\"Invt. Put-away\")) or\n```","level":"critical"},{"text":"In report 7323 \"Create Invt Put-away/Pick/Mvmt\", Integration event publisher in or for \"CheckWhseRequest\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\nend;\n\n local procedure CheckWhseRequest(var WarehouseRequest: Record \"Warehouse Request\") SkipRecord: Boolean\n var\n SalesHeader: Record \"Sales Header\";\n TransferHeader: Record \"Transfer Header\";\n GetSrcDocOutbound: Codeunit \"Get Source Doc. Outbound\";\n```","level":"critical"},{"text":"In report 7323 \"Create Invt Put-away/Pick/Mvmt\", Added integration event OnBeforeCheckWhseRequest in or for \"CheckWhseRequest\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\nbegin\n IsHandled := false;\n OnBeforeCheckWhseRequest(WarehouseRequest, ShowError, SkipRecord, IsHandled);\n if IsHandled then\n exit(SkipRecord);\n```","level":"critical"},{"text":"In report 7323 \"Create Invt Put-away/Pick/Mvmt\", Integration event publisher in or for \"OnBeforeCheckWhseRequest\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\n[IntegrationEvent(true, false)]\n local procedure OnBeforeCheckWhseRequest(var WarehouseRequest: Record \"Warehouse Request\"; ShowError: Boolean; var SkipRecord: Boolean; var IsHandled: Boolean)\n begin\n end;\n```","level":"critical"},{"text":"In report 7323 \"Create Invt Put-away/Pick/Mvmt\", Added integration event OnAfterCheckWhseRequest in or for \"CheckWhseRequest\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\nend;\n end;\n OnAfterCheckWhseRequest(WarehouseRequest, SkipRecord);\n end;\n\n procedure InitializeRequest(NewCreateInvtPutAway: Boolean; NewCreateInvtPick: Boolean; NewCreateInvtMovement: Boolean; NewPrintDocument: Boolean; NewShowError: Boolean)\n```","level":"critical"},{"text":"In report 7323 \"Create Invt Put-away/Pick/Mvmt\", Integration event publisher in or for \"OnAfterCheckWhseRequest\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\n[IntegrationEvent(false, false)]\n local procedure OnAfterCheckWhseRequest(var WarehouseRequest: Record \"Warehouse Request\"; var SkipRecord: Boolean)\n begin\n end;\n```","level":"critical"},{"text":"The change is applied to exactly 1 affected .al file(s) across these layers: W1. The affected files are: App/Layers/W1/BaseApp/Warehouse/Request/CreateInvtPutawayPickMvmt.Report.al.","level":"critical"},{"text":"The implementation is limited to the requested extensibility change and does not modify unrelated application behavior or files.","level":"expected"}]} +{"metadata":{"area":"purchases"},"repo":"microsoftInternal/NAV","instance_id":"microsoftInternal__NAV-Ext_Request_Impl-30026","base_commit":"dbe726222915a82fcb9b299d41287eecd82717d6","created_at":"2026-05-11","environment_setup_version":"28.0","project_paths":["App/Layers/W1/BaseApp"],"patch":"diff --git a/App/Layers/APAC/BaseApp/Purchases/Document/PurchaseOrderStatistics.Page.al b/App/Layers/APAC/BaseApp/Purchases/Document/PurchaseOrderStatistics.Page.al\nindex fa2b18c1e91..5f411f8038a 100644\n--- a/App/Layers/APAC/BaseApp/Purchases/Document/PurchaseOrderStatistics.Page.al\n+++ b/App/Layers/APAC/BaseApp/Purchases/Document/PurchaseOrderStatistics.Page.al\n@@ -980,7 +980,7 @@ page 403 \"Purchase Order Statistics\"\n exit(Round(Numerator / Denominator * 10000, 1));\n end;\n \n- local procedure VATLinesDrillDown(var VATLinesToDrillDown: Record \"VAT Amount Line\"; ThisTabAllowsVATEditing: Boolean)\n+ procedure VATLinesDrillDown(var VATLinesToDrillDown: Record \"VAT Amount Line\"; ThisTabAllowsVATEditing: Boolean)\n begin\n Clear(VATLinesForm);\n VATLinesForm.SetTempVATAmountLine(VATLinesToDrillDown);\ndiff --git a/App/Layers/ES/BaseApp/Purchases/Document/PurchaseOrderStatistics.Page.al b/App/Layers/ES/BaseApp/Purchases/Document/PurchaseOrderStatistics.Page.al\nindex e375d03bb38..cd3105e3fb0 100644\n--- a/App/Layers/ES/BaseApp/Purchases/Document/PurchaseOrderStatistics.Page.al\n+++ b/App/Layers/ES/BaseApp/Purchases/Document/PurchaseOrderStatistics.Page.al\n@@ -980,7 +980,7 @@ page 403 \"Purchase Order Statistics\"\n exit(Round(Numerator / Denominator * 10000, 1));\n end;\n \n- local procedure VATLinesDrillDown(var VATLinesToDrillDown: Record \"VAT Amount Line\"; ThisTabAllowsVATEditing: Boolean)\n+ procedure VATLinesDrillDown(var VATLinesToDrillDown: Record \"VAT Amount Line\"; ThisTabAllowsVATEditing: Boolean)\n begin\n Clear(VATLinesForm);\n VATLinesForm.SetTempVATAmountLine(VATLinesToDrillDown);\ndiff --git a/App/Layers/W1/BaseApp/Purchases/Document/PurchaseOrderStatistics.Page.al b/App/Layers/W1/BaseApp/Purchases/Document/PurchaseOrderStatistics.Page.al\nindex d6493fcbc9d..00653cd6cf5 100644\n--- a/App/Layers/W1/BaseApp/Purchases/Document/PurchaseOrderStatistics.Page.al\n+++ b/App/Layers/W1/BaseApp/Purchases/Document/PurchaseOrderStatistics.Page.al\n@@ -936,7 +936,7 @@ page 403 \"Purchase Order Statistics\"\n exit(Round(Numerator / Denominator * 10000, 1));\n end;\n \n- local procedure VATLinesDrillDown(var VATLinesToDrillDown: Record \"VAT Amount Line\"; ThisTabAllowsVATEditing: Boolean)\n+ procedure VATLinesDrillDown(var VATLinesToDrillDown: Record \"VAT Amount Line\"; ThisTabAllowsVATEditing: Boolean)\n begin\n Clear(VATLinesForm);\n VATLinesForm.SetTempVATAmountLine(VATLinesToDrillDown);\n","expected":[{"text":"In page 403 \"Purchase Order Statistics\", the VATLinesDrillDown procedure is changed from local to public.\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\nprocedure VATLinesDrillDown(var VATLinesToDrillDown: Record \"VAT Amount Line\"; ThisTabAllowsVATEditing: Boolean)\nbegin\n```","level":"critical"},{"text":"The change is applied to exactly 3 affected .al file(s) across these layers: APAC, ES, W1. The affected files are: App/Layers/APAC/BaseApp/Purchases/Document/PurchaseOrderStatistics.Page.al, App/Layers/ES/BaseApp/Purchases/Document/PurchaseOrderStatistics.Page.al, App/Layers/W1/BaseApp/Purchases/Document/PurchaseOrderStatistics.Page.al.","level":"critical"},{"text":"The implementation is limited to the requested extensibility change and does not modify unrelated application behavior or files.","level":"expected"}]} +{"metadata":{"area":"inventory"},"repo":"microsoftInternal/NAV","instance_id":"microsoftInternal__NAV-Ext_Request_Impl-29979","base_commit":"97177510ef6bae4a2e01919b0b4cdc1e3bf1bb2f","created_at":"2026-04-24","environment_setup_version":"28.0","project_paths":["App/Layers/W1/BaseApp"],"patch":"diff --git a/App/Layers/W1/BaseApp/Inventory/Tracking/MatchedOrderLineMgmt.Codeunit.al b/App/Layers/W1/BaseApp/Inventory/Tracking/MatchedOrderLineMgmt.Codeunit.al\nindex c9ef5ba1a7b..a4c55a3795d 100644\n--- a/App/Layers/W1/BaseApp/Inventory/Tracking/MatchedOrderLineMgmt.Codeunit.al\n+++ b/App/Layers/W1/BaseApp/Inventory/Tracking/MatchedOrderLineMgmt.Codeunit.al\n@@ -16,7 +16,7 @@ using System.Text;\n \n codeunit 5826 \"Matched Order Line Mgmt.\"\n {\n- Access = Internal;\n+ Access = Public;\n Permissions = TableData \"Posted Matched Order Line\" = RIMD;\n \n internal procedure ProcessMatchedReceiptOnInvoice(var PurchaseLine: Record \"Purchase Line\")\n@@ -877,7 +877,7 @@ codeunit 5826 \"Matched Order Line Mgmt.\"\n end;\n end;\n \n- internal procedure GetPurchaseOrderLines(PurchaseLine: Record \"Purchase Line\")\n+ procedure GetPurchaseOrderLines(PurchaseLine: Record \"Purchase Line\")\n var\n PurchaseHeaderInvoice, PurchaseHeaderOrder : Record \"Purchase Header\";\n PurchaseLineInvoice, PurchaseLineOrder : Record \"Purchase Line\";\n@@ -1064,7 +1064,7 @@ codeunit 5826 \"Matched Order Line Mgmt.\"\n exit(true);\n end;\n \n- internal procedure ShowMatchedInvoiceLines(PurchaseLineOrder: Record \"Purchase Line\")\n+ procedure ShowMatchedInvoiceLines(PurchaseLineOrder: Record \"Purchase Line\")\n var\n MatchedOrderLine: Record \"Matched Order Line\";\n PurchaseLine: Record \"Purchase Line\";\n","expected":[{"text":"In codeunit 5826 \"Matched Order Line Mgmt.\", Added integration event GetPurchaseOrderLines in or for \"GetPurchaseOrderLines\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\nPurchaseLineOrder.SetRange(\"Pay-to Vendor No.\", PurchaseHeaderInvoice.\"Pay-to Vendor No.\");\n PurchaseLineOrder.SetRange(\"Currency Code\", PurchaseHeaderInvoice.\"Currency Code\");\n OnGetPurchaseOrderLinesOnAfterSetPurchaseLineOrderFilters(PurchaseLineOrder, PurchaseHeaderInvoice);\n if PurchaseLineOrder.FindSet() then\n repeat\n PurchaseLineOrder.Mark(true);\n```","level":"critical"},{"text":"In codeunit 5826 \"Matched Order Line Mgmt.\", Procedure declaration in or for \"GetPurchaseOrderLines\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\nend;\n\n internal procedure GetPurchaseOrderLines(PurchaseLine: Record \"Purchase Line\")\n var\n PurchaseHeaderInvoice, PurchaseHeaderOrder : Record \"Purchase Header\";\n PurchaseLineInvoice, PurchaseLineOrder : Record \"Purchase Line\";\n PurchRcptLine: Record \"Purch. Rcpt. Line\";\n```","level":"critical"},{"text":"In codeunit 5826 \"Matched Order Line Mgmt.\", Procedure declaration in or for \"ShowMatchedInvoiceLines\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\nend;\n\n internal procedure ShowMatchedInvoiceLines(PurchaseLineOrder: Record \"Purchase Line\")\n var\n MatchedOrderLine: Record \"Matched Order Line\";\n PurchaseLine: Record \"Purchase Line\";\n PurchInvSystemIDFilter: Text;\n```","level":"critical"},{"text":"The change is applied to exactly 1 affected .al file(s) across these layers: W1. The affected files are: App/Layers/W1/BaseApp/Inventory/Tracking/MatchedOrderLineMgmt.Codeunit.al.","level":"critical"},{"text":"The implementation is limited to the requested extensibility change and does not modify unrelated application behavior or files.","level":"expected"}]} +{"metadata":{"area":"pricing"},"repo":"microsoftInternal/NAV","instance_id":"microsoftInternal__NAV-Ext_Request_Impl-29899","base_commit":"ce3ee4e3ee1728dc5aa05fc495f0f9dbeea6a4ff","created_at":"2026-04-07","environment_setup_version":"28.0","project_paths":["App/Layers/W1/BaseApp"],"patch":"diff --git a/App/Layers/W1/BaseApp/Pricing/PriceList/PriceListLineReview.Page.al b/App/Layers/W1/BaseApp/Pricing/PriceList/PriceListLineReview.Page.al\nindex f697827be61..c141291517b 100644\n--- a/App/Layers/W1/BaseApp/Pricing/PriceList/PriceListLineReview.Page.al\n+++ b/App/Layers/W1/BaseApp/Pricing/PriceList/PriceListLineReview.Page.al\n@@ -407,7 +407,14 @@ page 7005 \"Price List Line Review\"\n trigger OnQueryClosePage(CloseAction: Action): Boolean;\n var\n PriceListManagement: Codeunit \"Price List Management\";\n+ IsHandled: Boolean;\n+ Result: Boolean;\n begin\n+ IsHandled := false;\n+ OnBeforeOnQueryClosePage(Rec, Result, IsHandled);\n+ if IsHandled then\n+ exit(Result);\n+\n if HasDraftLines() then begin\n PriceListManagement.SendVerifyLinesNotification();\n exit(false);\n@@ -612,4 +619,9 @@ page 7005 \"Price List Line Review\"\n exit('');\n exit(PriceListHeader.Description);\n end;\n+\n+ [IntegrationEvent(false, false)]\n+ local procedure OnBeforeOnQueryClosePage(var PriceListLine: Record \"Price List Line\"; var Result: Boolean; var IsHandled: Boolean)\n+ begin\n+ end;\n }\n\\ No newline at end of file\n","expected":[{"text":"In page 7005 \"Price List Line Review\", Added integration event OnQueryClosePage in or for \"trigger OnQueryClosePage\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\nend;\n\n trigger OnQueryClosePage(CloseAction: Action): Boolean;\n var\n PriceListManagement: Codeunit \"Price List Management\";\n IsHandled: Boolean;\n```","level":"critical"},{"text":"In page 7005 \"Price List Line Review\", Integration event publisher in or for \"OnQueryClosePage\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\n[IntegrationEvent(false, false)]\n local procedure OnBeforeOnQueryClosePage(var PriceListLine: Record \"Price List Line\"; var Result: Boolean; var IsHandled: Boolean)\n begin\n end;\n```","level":"critical"},{"text":"In page 7005 \"Price List Line Review\", Added integration event OnQueryClosePageOnBeforeDraftLineCheck in or for \"trigger OnQueryClosePage\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\nbegin\n IsHandled := false;\n OnQueryClosePageOnBeforeDraftLineCheck(Rec, Result, IsHandled);\n if IsHandled then\n exit(Result);\n```","level":"critical"},{"text":"In page 7005 \"Price List Line Review\", Integration event publisher in or for \"OnQueryClosePageOnBeforeDraftLineCheck\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\n[IntegrationEvent(false, false)]\n local procedure OnQueryClosePageOnBeforeDraftLineCheck(var PriceListHeader: Record \"Price List Header\"; var Result: Boolean; var IsHandled: Boolean)\n begin\n end;\n```","level":"critical"},{"text":"The change is applied to exactly 1 affected .al file(s) across these layers: W1. The affected files are: App/Layers/W1/BaseApp/Pricing/PriceList/PriceListLineReview.Page.al.","level":"critical"},{"text":"The implementation is limited to the requested extensibility change and does not modify unrelated application behavior or files.","level":"expected"}]} +{"metadata":{"area":"manufacturing"},"repo":"microsoftInternal/NAV","instance_id":"microsoftInternal__NAV-Ext_Request_Impl-29831","base_commit":"6b83b651f8f2ff4e698ae62ed9384e09f2c0d3f0","created_at":"2026-03-17","environment_setup_version":"28.0","project_paths":["App/Layers/W1/BaseApp"],"patch":"diff --git a/App/Layers/IT/BaseApp/Manufacturing/Inventory/Requisition/MfgRequisitionLine.TableExt.al b/App/Layers/IT/BaseApp/Manufacturing/Inventory/Requisition/MfgRequisitionLine.TableExt.al\nindex 4711319488f..3a8c0ed8412 100644\n--- a/App/Layers/IT/BaseApp/Manufacturing/Inventory/Requisition/MfgRequisitionLine.TableExt.al\n+++ b/App/Layers/IT/BaseApp/Manufacturing/Inventory/Requisition/MfgRequisitionLine.TableExt.al\n@@ -680,7 +680,13 @@ tableextension 99000860 \"Mfg. Requisition Line\" extends \"Requisition Line\"\n Item: Record Item;\n ProdOrder: Record \"Production Order\";\n ProdOrderLine: Record \"Prod. Order Line\";\n+ IsHandled: Boolean;\n begin\n+ IsHandled := false;\n+ OnBeforeValidateProdOrderOnReqLine(ReqLine, IsHandled);\n+ if IsHandled then\n+ exit;\n+\n ReqLine.TestField(Type, ReqLine.Type::Item);\n \n if ProdOrder.Get(ProdOrder.Status::Released, ReqLine.\"Prod. Order No.\") then begin\n@@ -699,6 +705,11 @@ tableextension 99000860 \"Mfg. Requisition Line\" extends \"Requisition Line\"\n end;\n end;\n \n+ [IntegrationEvent(false, false)]\n+ local procedure OnBeforeValidateProdOrderOnReqLine(var RequisitionLine: Record \"Requisition Line\"; var IsHandled: Boolean)\n+ begin\n+ end;\n+\n [IntegrationEvent(false, false)]\n local procedure OnAfterTransferFromProdOrderLine(var ReqLine: Record \"Requisition Line\"; ProdOrderLine: Record \"Prod. Order Line\")\n begin\ndiff --git a/App/Layers/W1/BaseApp/Manufacturing/Inventory/Requisition/MfgRequisitionLine.TableExt.al b/App/Layers/W1/BaseApp/Manufacturing/Inventory/Requisition/MfgRequisitionLine.TableExt.al\nindex 57903484b87..a48fa1061d1 100644\n--- a/App/Layers/W1/BaseApp/Manufacturing/Inventory/Requisition/MfgRequisitionLine.TableExt.al\n+++ b/App/Layers/W1/BaseApp/Manufacturing/Inventory/Requisition/MfgRequisitionLine.TableExt.al\n@@ -481,7 +481,13 @@ tableextension 99000860 \"Mfg. Requisition Line\" extends \"Requisition Line\"\n Item: Record Item;\n ProdOrder: Record \"Production Order\";\n ProdOrderLine: Record \"Prod. Order Line\";\n+ IsHandled: Boolean;\n begin\n+ IsHandled := false;\n+ OnBeforeValidateProdOrderOnReqLine(ReqLine, IsHandled);\n+ if IsHandled then\n+ exit;\n+\n ReqLine.TestField(Type, ReqLine.Type::Item);\n \n if ProdOrder.Get(ProdOrder.Status::Released, ReqLine.\"Prod. Order No.\") then begin\n@@ -500,6 +506,11 @@ tableextension 99000860 \"Mfg. Requisition Line\" extends \"Requisition Line\"\n end;\n end;\n \n+ [IntegrationEvent(false, false)]\n+ local procedure OnBeforeValidateProdOrderOnReqLine(var RequisitionLine: Record \"Requisition Line\"; var IsHandled: Boolean)\n+ begin\n+ end;\n+\n [IntegrationEvent(false, false)]\n local procedure OnAfterTransferFromProdOrderLine(var ReqLine: Record \"Requisition Line\"; ProdOrderLine: Record \"Prod. Order Line\")\n begin\n","expected":[{"text":"In tableextension 99000860 \"Mfg. Requisition Line\", Added integration event OnBeforeValidateProdOrderOnReqLine in or for \"ValidateProdOrderOnReqLine\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\nbegin\n IsHandled := false;\n OnBeforeValidateProdOrderOnReqLine(ReqLine, IsHandled);\n if IsHandled then\n exit;\n```","level":"critical"},{"text":"In tableextension 99000860 \"Mfg. Requisition Line\", Integration event publisher in or for \"OnBeforeValidateProdOrderOnReqLine\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\n[IntegrationEvent(false, false)]\n local procedure OnBeforeValidateProdOrderOnReqLine(var RequisitionLine: Record \"Requisition Line\"; var IsHandled: Boolean)\n begin\n end;\n```","level":"critical"},{"text":"In tableextension 99000860 \"Mfg. Requisition Line\", Added integration event OnBeforeValidateProdOrderOnPurchLine in or for \"RunOnBeforeValidateProdOrderOnPurchLine\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\ninternal procedure RunOnBeforeValidateProdOrderOnPurchLine(var PurchLine: Record \"Purchase Line\"; var IsHandled: Boolean)\n begin\n OnBeforeValidateProdOrderOnPurchLine(PurchLine, IsHandled);\n end;\n\n [Obsolete('Moved to table extension MfgPurchaseLine', '27.0')]\n```","level":"critical"},{"text":"In tableextension 99000860 \"Mfg. Requisition Line\", Integration event publisher in or for \"OnBeforeValidateProdOrderOnPurchLine\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\nend;\n\n internal procedure RunOnBeforeValidateProdOrderOnPurchLine(var PurchLine: Record \"Purchase Line\"; var IsHandled: Boolean)\n begin\n OnBeforeValidateProdOrderOnPurchLine(PurchLine, IsHandled);\n end;\n```","level":"critical"},{"text":"The change is applied to exactly 2 affected .al file(s) across these layers: IT, W1. The affected files are: App/Layers/IT/BaseApp/Manufacturing/Inventory/Requisition/MfgRequisitionLine.TableExt.al, App/Layers/W1/BaseApp/Manufacturing/Inventory/Requisition/MfgRequisitionLine.TableExt.al.","level":"critical"},{"text":"The implementation is limited to the requested extensibility change and does not modify unrelated application behavior or files.","level":"expected"}]} +{"metadata":{"area":"service"},"repo":"microsoftInternal/NAV","instance_id":"microsoftInternal__NAV-Ext_Request_Impl-29768","base_commit":"4d5364fe9db538581afa951a8c10d8ea027a3561","created_at":"2026-03-02","environment_setup_version":"28.0","project_paths":["App/Layers/W1/BaseApp"],"patch":"diff --git a/App/Layers/ES/BaseApp/Service/Document/ServiceOrder.Report.al b/App/Layers/ES/BaseApp/Service/Document/ServiceOrder.Report.al\nindex cb8c5d38e01..531f0d2ef89 100644\n--- a/App/Layers/ES/BaseApp/Service/Document/ServiceOrder.Report.al\n+++ b/App/Layers/ES/BaseApp/Service/Document/ServiceOrder.Report.al\n@@ -671,7 +671,6 @@ report 5900 \"Service Order\"\n DimSetEntry2: Record \"Dimension Set Entry\";\n LanguageMgt: Codeunit Language;\n FormatAddr: Codeunit \"Format Address\";\n- FormatDocument: Codeunit \"Format Document\";\n NoOfCopies: Integer;\n NoOfLoops: Integer;\n OutputNo: Integer;\n@@ -724,6 +723,7 @@ report 5900 \"Service Order\"\n CompanyInfo: Record \"Company Information\";\n CompanyInfo1: Record \"Company Information\";\n CompanyInfo2: Record \"Company Information\";\n+ FormatDocument: Codeunit \"Format Document\";\n \n local procedure IsReportInPreviewMode(): Boolean\n var\ndiff --git a/App/Layers/FI/BaseApp/Service/Document/ServiceOrder.Report.al b/App/Layers/FI/BaseApp/Service/Document/ServiceOrder.Report.al\nindex 2f43101ddfd..00363649044 100644\n--- a/App/Layers/FI/BaseApp/Service/Document/ServiceOrder.Report.al\n+++ b/App/Layers/FI/BaseApp/Service/Document/ServiceOrder.Report.al\n@@ -676,7 +676,6 @@ report 5900 \"Service Order\"\n DimSetEntry2: Record \"Dimension Set Entry\";\n LanguageMgt: Codeunit Language;\n FormatAddr: Codeunit \"Format Address\";\n- FormatDocument: Codeunit \"Format Document\";\n NoOfCopies: Integer;\n NoOfLoops: Integer;\n OutputNo: Integer;\n@@ -729,6 +728,7 @@ report 5900 \"Service Order\"\n CompanyInfo: Record \"Company Information\";\n CompanyInfo1: Record \"Company Information\";\n CompanyInfo2: Record \"Company Information\";\n+ FormatDocument: Codeunit \"Format Document\";\n \n local procedure IsReportInPreviewMode(): Boolean\n var\ndiff --git a/App/Layers/NA/BaseApp/Service/Document/ServiceOrder.Report.al b/App/Layers/NA/BaseApp/Service/Document/ServiceOrder.Report.al\nindex 1bc35e4ee03..ad242e29778 100644\n--- a/App/Layers/NA/BaseApp/Service/Document/ServiceOrder.Report.al\n+++ b/App/Layers/NA/BaseApp/Service/Document/ServiceOrder.Report.al\n@@ -764,7 +764,6 @@ report 5900 \"Service Order\"\n DimSetEntry2: Record \"Dimension Set Entry\";\n LanguageMgt: Codeunit Language;\n FormatAddr: Codeunit \"Format Address\";\n- FormatDocument: Codeunit \"Format Document\";\n NoOfCopies: Integer;\n NoOfLoops: Integer;\n OutputNo: Integer;\n@@ -816,6 +815,7 @@ report 5900 \"Service Order\"\n CompanyInfo: Record \"Company Information\";\n CompanyInfo1: Record \"Company Information\";\n CompanyInfo2: Record \"Company Information\";\n+ FormatDocument: Codeunit \"Format Document\";\n \n local procedure IsReportInPreviewMode(): Boolean\n var\ndiff --git a/App/Layers/W1/BaseApp/Service/Document/ServiceOrder.Report.al b/App/Layers/W1/BaseApp/Service/Document/ServiceOrder.Report.al\nindex 10effb27e4d..fd7327ccb08 100644\n--- a/App/Layers/W1/BaseApp/Service/Document/ServiceOrder.Report.al\n+++ b/App/Layers/W1/BaseApp/Service/Document/ServiceOrder.Report.al\n@@ -664,7 +664,6 @@ report 5900 \"Service Order\"\n DimSetEntry2: Record \"Dimension Set Entry\";\n LanguageMgt: Codeunit Language;\n FormatAddr: Codeunit \"Format Address\";\n- FormatDocument: Codeunit \"Format Document\";\n NoOfCopies: Integer;\n NoOfLoops: Integer;\n OutputNo: Integer;\n@@ -715,6 +714,7 @@ report 5900 \"Service Order\"\n CompanyInfo: Record \"Company Information\";\n CompanyInfo1: Record \"Company Information\";\n CompanyInfo2: Record \"Company Information\";\n+ FormatDocument: Codeunit \"Format Document\";\n \n local procedure IsReportInPreviewMode(): Boolean\n var\n","expected":[{"text":"In report 5900 \"Service Order\", FormatDocument codeunit variable in or for \"var\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\nif Number > 1 then begin\n CopyText := FormatDocument.GetCOPYText();\n OutputNo += 1;\n```","level":"critical"},{"text":"The change is applied to exactly 4 affected .al file(s) across these layers: ES, FI, NA, W1. The affected files are: App/Layers/ES/BaseApp/Service/Document/ServiceOrder.Report.al, App/Layers/FI/BaseApp/Service/Document/ServiceOrder.Report.al, App/Layers/NA/BaseApp/Service/Document/ServiceOrder.Report.al, App/Layers/W1/BaseApp/Service/Document/ServiceOrder.Report.al.","level":"critical"},{"text":"The implementation is limited to the requested extensibility change and does not modify unrelated application behavior or files.","level":"expected"}]} +{"metadata":{"area":"inventory"},"repo":"microsoftInternal/NAV","instance_id":"microsoftInternal__NAV-Ext_Request_Impl-29865","base_commit":"b390db3ceb21e288e8a8774b233b7b1d2d398edf","created_at":"2026-03-24","environment_setup_version":"28.0","project_paths":["App/Layers/W1/BaseApp"],"patch":"diff --git a/App/Layers/W1/BaseApp/Inventory/Item/ItemTemplMgt.Codeunit.al b/App/Layers/W1/BaseApp/Inventory/Item/ItemTemplMgt.Codeunit.al\nindex fa8e9cae3b5..d25b2cb4804 100644\n--- a/App/Layers/W1/BaseApp/Inventory/Item/ItemTemplMgt.Codeunit.al\n+++ b/App/Layers/W1/BaseApp/Inventory/Item/ItemTemplMgt.Codeunit.al\n@@ -741,7 +741,7 @@ codeunit 1336 \"Item Templ. Mgt.\"\n end;\n \n [IntegrationEvent(false, false)]\n- local procedure OnBeforeSelectItemTemplate(ItemTempl: Record \"Item Templ.\"; var IsHandled: Boolean; var Result: Boolean)\n+ local procedure OnBeforeSelectItemTemplate(var ItemTempl: Record \"Item Templ.\"; var IsHandled: Boolean; var Result: Boolean)\n begin\n end;\n \n","expected":[{"text":"In codeunit 1336 \"Item Templ. Mgt.\", Added integration event OnBeforeSelectItemTemplate in or for \"CreateItemFromTemplate\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\nIsHandled := true;\n\n OnCreateItemFromTemplateOnBeforeSelectItemTemplate(Item, ItemTempl);\n if ItemTemplCode = '' then begin\n if not SelectItemTemplate(ItemTempl) then\n exit(false);\n```","level":"critical"},{"text":"In codeunit 1336 \"Item Templ. Mgt.\", Integration event publisher in or for \"OnBeforeSelectItemTemplate\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\n[IntegrationEvent(false, false)]\n local procedure OnCreateItemFromTemplateOnBeforeSelectItemTemplate(Item: Record Item; var ItemTempl: Record \"Item Templ.\")\n begin\n end;\n```","level":"critical"},{"text":"The change is applied to exactly 1 affected .al file(s) across these layers: W1. The affected files are: App/Layers/W1/BaseApp/Inventory/Item/ItemTemplMgt.Codeunit.al.","level":"critical"},{"text":"The implementation is limited to the requested extensibility change and does not modify unrelated application behavior or files.","level":"expected"}]} +{"metadata":{"area":"sales"},"repo":"microsoftInternal/NAV","instance_id":"microsoftInternal__NAV-Ext_Request_Impl-30241","base_commit":"f7e26eba1bf2a4a87f8104373ca7519f792467f8","created_at":"2026-06-23","environment_setup_version":"28.0","project_paths":["App/Layers/W1/BaseApp"],"patch":"diff --git a/App/Layers/APAC/BaseApp/Sales/Posting/SalesPost.Codeunit.al b/App/Layers/APAC/BaseApp/Sales/Posting/SalesPost.Codeunit.al\nindex 808e33afb88..109dcd10807 100644\n--- a/App/Layers/APAC/BaseApp/Sales/Posting/SalesPost.Codeunit.al\n+++ b/App/Layers/APAC/BaseApp/Sales/Posting/SalesPost.Codeunit.al\n@@ -5383,6 +5383,7 @@ codeunit 80 \"Sales-Post\"\n TempPrepmtSalesLine.\"Prepayment %\" := TempSalesLine.\"Prepayment %\";\n OnBeforeTempPrepmtSalesLineModify(TempPrepmtSalesLine, TempSalesLine, SalesHeader, CompleteFunctionality);\n TempPrepmtSalesLine.Modify();\n+ OnCreatePrepaymentLinesOnAfterTempPrepmtSalesLineModify(TempPrepmtSalesLine, TempSalesLine, SalesHeader);\t\t\t\n FillPrepmtLineNoBuf(TempSalesLine.\"Line No.\", TempPrepmtSalesLine.\"Line No.\");\n end else begin\n TempPrepmtSalesLine.Init();\n@@ -5433,6 +5434,7 @@ codeunit 80 \"Sales-Post\"\n end;\n OnBeforeTempPrepmtSalesLineInsert(TempPrepmtSalesLine, TempSalesLine, SalesHeader, CompleteFunctionality);\n TempPrepmtSalesLine.Insert();\n+ OnCreatePrepaymentLinesOnAfterTempPrepmtSalesLineInsert(TempPrepmtSalesLine, TempSalesLine, SalesHeader);\n \n IsHandled := false;\n OnBeforeCreatePrepaymentTextLines(TempPrepmtSalesLine, TempSalesLine, SalesHeader, CompleteFunctionality, IsHandled);\n@@ -12697,6 +12699,16 @@ codeunit 80 \"Sales-Post\"\n begin\n end;\n \n+ [IntegrationEvent(false, false)]\n+ local procedure OnCreatePrepaymentLinesOnAfterTempPrepmtSalesLineModify(var TempPrepmtSalesLine: Record \"Sales Line\" temporary; var TempSalesLine: Record \"Sales Line\" temporary; SalesHeader: Record \"Sales Header\")\n+ begin\n+ end;\n+\n+ [IntegrationEvent(false, false)]\n+ local procedure OnCreatePrepaymentLinesOnAfterTempPrepmtSalesLineInsert(var TempPrepmtSalesLine: Record \"Sales Line\" temporary; var TempSalesLine: Record \"Sales Line\" temporary; SalesHeader: Record \"Sales Header\")\n+ begin\n+ end;\n+\n /// \n /// Raised before inserting temporary line for extended text during create prepayment lines.\n /// \ndiff --git a/App/Layers/BE/BaseApp/Sales/Posting/SalesPost.Codeunit.al b/App/Layers/BE/BaseApp/Sales/Posting/SalesPost.Codeunit.al\nindex 961128fd62b..9fceadcb181 100644\n--- a/App/Layers/BE/BaseApp/Sales/Posting/SalesPost.Codeunit.al\n+++ b/App/Layers/BE/BaseApp/Sales/Posting/SalesPost.Codeunit.al\n@@ -5315,6 +5315,7 @@ codeunit 80 \"Sales-Post\"\n TempPrepmtSalesLine.\"Prepayment %\" := TempSalesLine.\"Prepayment %\";\n OnBeforeTempPrepmtSalesLineModify(TempPrepmtSalesLine, TempSalesLine, SalesHeader, CompleteFunctionality);\n TempPrepmtSalesLine.Modify();\n+ OnCreatePrepaymentLinesOnAfterTempPrepmtSalesLineModify(TempPrepmtSalesLine, TempSalesLine, SalesHeader);\n end else begin\n TempPrepmtSalesLine.Init();\n TempPrepmtSalesLine.\"Document Type\" := SalesHeader.\"Document Type\";\n@@ -5347,6 +5348,7 @@ codeunit 80 \"Sales-Post\"\n NextLineNo := NextLineNo + 10000;\n OnBeforeTempPrepmtSalesLineInsert(TempPrepmtSalesLine, TempSalesLine, SalesHeader, CompleteFunctionality);\n TempPrepmtSalesLine.Insert();\n+ OnCreatePrepaymentLinesOnAfterTempPrepmtSalesLineInsert(TempPrepmtSalesLine, TempSalesLine, SalesHeader);\n \n IsHandled := false;\n OnBeforeCreatePrepaymentTextLines(TempPrepmtSalesLine, TempSalesLine, SalesHeader, CompleteFunctionality, IsHandled);\n@@ -12381,6 +12383,16 @@ codeunit 80 \"Sales-Post\"\n begin\n end;\n \n+ [IntegrationEvent(false, false)]\n+ local procedure OnCreatePrepaymentLinesOnAfterTempPrepmtSalesLineModify(var TempPrepmtSalesLine: Record \"Sales Line\" temporary; var TempSalesLine: Record \"Sales Line\" temporary; SalesHeader: Record \"Sales Header\")\n+ begin\n+ end;\n+\n+ [IntegrationEvent(false, false)]\n+ local procedure OnCreatePrepaymentLinesOnAfterTempPrepmtSalesLineInsert(var TempPrepmtSalesLine: Record \"Sales Line\" temporary; var TempSalesLine: Record \"Sales Line\" temporary; SalesHeader: Record \"Sales Header\")\n+ begin\n+ end;\n+\n /// \n /// Raised before inserting temporary line for extended text during create prepayment lines.\n /// \ndiff --git a/App/Layers/CH/BaseApp/Sales/Posting/SalesPost.Codeunit.al b/App/Layers/CH/BaseApp/Sales/Posting/SalesPost.Codeunit.al\nindex 75fecc1b669..1549f281462 100644\n--- a/App/Layers/CH/BaseApp/Sales/Posting/SalesPost.Codeunit.al\n+++ b/App/Layers/CH/BaseApp/Sales/Posting/SalesPost.Codeunit.al\n@@ -5309,6 +5309,7 @@ codeunit 80 \"Sales-Post\"\n TempPrepmtSalesLine.\"Prepayment %\" := TempSalesLine.\"Prepayment %\";\n OnBeforeTempPrepmtSalesLineModify(TempPrepmtSalesLine, TempSalesLine, SalesHeader, CompleteFunctionality);\n TempPrepmtSalesLine.Modify();\n+ OnCreatePrepaymentLinesOnAfterTempPrepmtSalesLineModify(TempPrepmtSalesLine, TempSalesLine, SalesHeader);\n end else begin\n TempPrepmtSalesLine.Init();\n TempPrepmtSalesLine.\"Document Type\" := SalesHeader.\"Document Type\";\n@@ -5341,6 +5342,7 @@ codeunit 80 \"Sales-Post\"\n NextLineNo := NextLineNo + 10000;\n OnBeforeTempPrepmtSalesLineInsert(TempPrepmtSalesLine, TempSalesLine, SalesHeader, CompleteFunctionality);\n TempPrepmtSalesLine.Insert();\n+ OnCreatePrepaymentLinesOnAfterTempPrepmtSalesLineInsert(TempPrepmtSalesLine, TempSalesLine, SalesHeader);\n \n IsHandled := false;\n OnBeforeCreatePrepaymentTextLines(TempPrepmtSalesLine, TempSalesLine, SalesHeader, CompleteFunctionality, IsHandled);\n@@ -12454,6 +12456,16 @@ codeunit 80 \"Sales-Post\"\n begin\n end;\n \n+ [IntegrationEvent(false, false)]\n+ local procedure OnCreatePrepaymentLinesOnAfterTempPrepmtSalesLineModify(var TempPrepmtSalesLine: Record \"Sales Line\" temporary; var TempSalesLine: Record \"Sales Line\" temporary; SalesHeader: Record \"Sales Header\")\n+ begin\n+ end;\n+\n+ [IntegrationEvent(false, false)]\n+ local procedure OnCreatePrepaymentLinesOnAfterTempPrepmtSalesLineInsert(var TempPrepmtSalesLine: Record \"Sales Line\" temporary; var TempSalesLine: Record \"Sales Line\" temporary; SalesHeader: Record \"Sales Header\")\n+ begin\n+ end;\n+\n /// \n /// Raised before inserting temporary line for extended text during create prepayment lines.\n /// \ndiff --git a/App/Layers/ES/BaseApp/Sales/Posting/SalesPost.Codeunit.al b/App/Layers/ES/BaseApp/Sales/Posting/SalesPost.Codeunit.al\nindex aab504b2c98..1ad73b69445 100644\n--- a/App/Layers/ES/BaseApp/Sales/Posting/SalesPost.Codeunit.al\n+++ b/App/Layers/ES/BaseApp/Sales/Posting/SalesPost.Codeunit.al\n@@ -5359,6 +5359,7 @@ codeunit 80 \"Sales-Post\"\n TempPrepmtSalesLine.\"Prepayment %\" := TempSalesLine.\"Prepayment %\";\n OnBeforeTempPrepmtSalesLineModify(TempPrepmtSalesLine, TempSalesLine, SalesHeader, CompleteFunctionality);\n TempPrepmtSalesLine.Modify();\n+ OnCreatePrepaymentLinesOnAfterTempPrepmtSalesLineModify(TempPrepmtSalesLine, TempSalesLine, SalesHeader);\n end else begin\n TempPrepmtSalesLine.Init();\n TempPrepmtSalesLine.\"Document Type\" := SalesHeader.\"Document Type\";\n@@ -5391,6 +5392,7 @@ codeunit 80 \"Sales-Post\"\n NextLineNo := NextLineNo + 10000;\n OnBeforeTempPrepmtSalesLineInsert(TempPrepmtSalesLine, TempSalesLine, SalesHeader, CompleteFunctionality);\n TempPrepmtSalesLine.Insert();\n+ OnCreatePrepaymentLinesOnAfterTempPrepmtSalesLineInsert(TempPrepmtSalesLine, TempSalesLine, SalesHeader);\n \n IsHandled := false;\n OnBeforeCreatePrepaymentTextLines(TempPrepmtSalesLine, TempSalesLine, SalesHeader, CompleteFunctionality, IsHandled);\n@@ -12505,6 +12507,16 @@ codeunit 80 \"Sales-Post\"\n begin\n end;\n \n+ [IntegrationEvent(false, false)]\n+ local procedure OnCreatePrepaymentLinesOnAfterTempPrepmtSalesLineModify(var TempPrepmtSalesLine: Record \"Sales Line\" temporary; var TempSalesLine: Record \"Sales Line\" temporary; SalesHeader: Record \"Sales Header\")\n+ begin\n+ end;\n+\n+ [IntegrationEvent(false, false)]\n+ local procedure OnCreatePrepaymentLinesOnAfterTempPrepmtSalesLineInsert(var TempPrepmtSalesLine: Record \"Sales Line\" temporary; var TempSalesLine: Record \"Sales Line\" temporary; SalesHeader: Record \"Sales Header\")\n+ begin\n+ end;\n+\n /// \n /// Raised before inserting temporary line for extended text during create prepayment lines.\n /// \ndiff --git a/App/Layers/FI/BaseApp/Sales/Posting/SalesPost.Codeunit.al b/App/Layers/FI/BaseApp/Sales/Posting/SalesPost.Codeunit.al\nindex f0316bec320..9bac4aedecd 100644\n--- a/App/Layers/FI/BaseApp/Sales/Posting/SalesPost.Codeunit.al\n+++ b/App/Layers/FI/BaseApp/Sales/Posting/SalesPost.Codeunit.al\n@@ -5275,6 +5275,7 @@ codeunit 80 \"Sales-Post\"\n TempPrepmtSalesLine.\"Prepayment %\" := TempSalesLine.\"Prepayment %\";\n OnBeforeTempPrepmtSalesLineModify(TempPrepmtSalesLine, TempSalesLine, SalesHeader, CompleteFunctionality);\n TempPrepmtSalesLine.Modify();\n+ OnCreatePrepaymentLinesOnAfterTempPrepmtSalesLineModify(TempPrepmtSalesLine, TempSalesLine, SalesHeader);\n end else begin\n TempPrepmtSalesLine.Init();\n TempPrepmtSalesLine.\"Document Type\" := SalesHeader.\"Document Type\";\n@@ -5307,6 +5308,7 @@ codeunit 80 \"Sales-Post\"\n NextLineNo := NextLineNo + 10000;\n OnBeforeTempPrepmtSalesLineInsert(TempPrepmtSalesLine, TempSalesLine, SalesHeader, CompleteFunctionality);\n TempPrepmtSalesLine.Insert();\n+ OnCreatePrepaymentLinesOnAfterTempPrepmtSalesLineInsert(TempPrepmtSalesLine, TempSalesLine, SalesHeader);\n \n IsHandled := false;\n OnBeforeCreatePrepaymentTextLines(TempPrepmtSalesLine, TempSalesLine, SalesHeader, CompleteFunctionality, IsHandled);\n@@ -12350,6 +12352,16 @@ codeunit 80 \"Sales-Post\"\n begin\n end;\n \n+ [IntegrationEvent(false, false)]\n+ local procedure OnCreatePrepaymentLinesOnAfterTempPrepmtSalesLineModify(var TempPrepmtSalesLine: Record \"Sales Line\" temporary; var TempSalesLine: Record \"Sales Line\" temporary; SalesHeader: Record \"Sales Header\")\n+ begin\n+ end;\n+\n+ [IntegrationEvent(false, false)]\n+ local procedure OnCreatePrepaymentLinesOnAfterTempPrepmtSalesLineInsert(var TempPrepmtSalesLine: Record \"Sales Line\" temporary; var TempSalesLine: Record \"Sales Line\" temporary; SalesHeader: Record \"Sales Header\")\n+ begin\n+ end;\n+\n /// \n /// Raised before inserting temporary line for extended text during create prepayment lines.\n /// \ndiff --git a/App/Layers/FR/BaseApp/Sales/Posting/SalesPost.Codeunit.al b/App/Layers/FR/BaseApp/Sales/Posting/SalesPost.Codeunit.al\nindex 4b8956c9c3d..5d85bedfb87 100644\n--- a/App/Layers/FR/BaseApp/Sales/Posting/SalesPost.Codeunit.al\n+++ b/App/Layers/FR/BaseApp/Sales/Posting/SalesPost.Codeunit.al\n@@ -5274,6 +5274,7 @@ codeunit 80 \"Sales-Post\"\n TempPrepmtSalesLine.\"Prepayment %\" := TempSalesLine.\"Prepayment %\";\n OnBeforeTempPrepmtSalesLineModify(TempPrepmtSalesLine, TempSalesLine, SalesHeader, CompleteFunctionality);\n TempPrepmtSalesLine.Modify();\n+ OnCreatePrepaymentLinesOnAfterTempPrepmtSalesLineModify(TempPrepmtSalesLine, TempSalesLine, SalesHeader);\n end else begin\n TempPrepmtSalesLine.Init();\n TempPrepmtSalesLine.\"Document Type\" := SalesHeader.\"Document Type\";\n@@ -5306,6 +5307,7 @@ codeunit 80 \"Sales-Post\"\n NextLineNo := NextLineNo + 10000;\n OnBeforeTempPrepmtSalesLineInsert(TempPrepmtSalesLine, TempSalesLine, SalesHeader, CompleteFunctionality);\n TempPrepmtSalesLine.Insert();\n+ OnCreatePrepaymentLinesOnAfterTempPrepmtSalesLineInsert(TempPrepmtSalesLine, TempSalesLine, SalesHeader);\n \n IsHandled := false;\n OnBeforeCreatePrepaymentTextLines(TempPrepmtSalesLine, TempSalesLine, SalesHeader, CompleteFunctionality, IsHandled);\n@@ -12374,6 +12376,16 @@ codeunit 80 \"Sales-Post\"\n begin\n end;\n \n+ [IntegrationEvent(false, false)]\n+ local procedure OnCreatePrepaymentLinesOnAfterTempPrepmtSalesLineModify(var TempPrepmtSalesLine: Record \"Sales Line\" temporary; var TempSalesLine: Record \"Sales Line\" temporary; SalesHeader: Record \"Sales Header\")\n+ begin\n+ end;\n+\n+ [IntegrationEvent(false, false)]\n+ local procedure OnCreatePrepaymentLinesOnAfterTempPrepmtSalesLineInsert(var TempPrepmtSalesLine: Record \"Sales Line\" temporary; var TempSalesLine: Record \"Sales Line\" temporary; SalesHeader: Record \"Sales Header\")\n+ begin\n+ end;\n+\n /// \n /// Raised before inserting temporary line for extended text during create prepayment lines.\n /// \ndiff --git a/App/Layers/GB/BaseApp/Sales/Posting/SalesPost.Codeunit.al b/App/Layers/GB/BaseApp/Sales/Posting/SalesPost.Codeunit.al\nindex e0e98906b81..53a9d7edd81 100644\n--- a/App/Layers/GB/BaseApp/Sales/Posting/SalesPost.Codeunit.al\n+++ b/App/Layers/GB/BaseApp/Sales/Posting/SalesPost.Codeunit.al\n@@ -5306,6 +5306,7 @@ codeunit 80 \"Sales-Post\"\n TempPrepmtSalesLine.\"Prepayment %\" := TempSalesLine.\"Prepayment %\";\n OnBeforeTempPrepmtSalesLineModify(TempPrepmtSalesLine, TempSalesLine, SalesHeader, CompleteFunctionality);\n TempPrepmtSalesLine.Modify();\n+ OnCreatePrepaymentLinesOnAfterTempPrepmtSalesLineModify(TempPrepmtSalesLine, TempSalesLine, SalesHeader);\n end else begin\n TempPrepmtSalesLine.Init();\n TempPrepmtSalesLine.\"Document Type\" := SalesHeader.\"Document Type\";\n@@ -5338,6 +5339,7 @@ codeunit 80 \"Sales-Post\"\n NextLineNo := NextLineNo + 10000;\n OnBeforeTempPrepmtSalesLineInsert(TempPrepmtSalesLine, TempSalesLine, SalesHeader, CompleteFunctionality);\n TempPrepmtSalesLine.Insert();\n+ OnCreatePrepaymentLinesOnAfterTempPrepmtSalesLineInsert(TempPrepmtSalesLine, TempSalesLine, SalesHeader);\n \n IsHandled := false;\n OnBeforeCreatePrepaymentTextLines(TempPrepmtSalesLine, TempSalesLine, SalesHeader, CompleteFunctionality, IsHandled);\n@@ -12409,6 +12411,16 @@ codeunit 80 \"Sales-Post\"\n begin\n end;\n \n+ [IntegrationEvent(false, false)]\n+ local procedure OnCreatePrepaymentLinesOnAfterTempPrepmtSalesLineModify(var TempPrepmtSalesLine: Record \"Sales Line\" temporary; var TempSalesLine: Record \"Sales Line\" temporary; SalesHeader: Record \"Sales Header\")\n+ begin\n+ end;\n+\n+ [IntegrationEvent(false, false)]\n+ local procedure OnCreatePrepaymentLinesOnAfterTempPrepmtSalesLineInsert(var TempPrepmtSalesLine: Record \"Sales Line\" temporary; var TempSalesLine: Record \"Sales Line\" temporary; SalesHeader: Record \"Sales Header\")\n+ begin\n+ end;\n+\n /// \n /// Raised before inserting temporary line for extended text during create prepayment lines.\n /// \ndiff --git a/App/Layers/IT/BaseApp/Sales/Posting/SalesPost.Codeunit.al b/App/Layers/IT/BaseApp/Sales/Posting/SalesPost.Codeunit.al\nindex 6b819a5fa74..09925f736f9 100644\n--- a/App/Layers/IT/BaseApp/Sales/Posting/SalesPost.Codeunit.al\n+++ b/App/Layers/IT/BaseApp/Sales/Posting/SalesPost.Codeunit.al\n@@ -5320,6 +5320,7 @@ codeunit 80 \"Sales-Post\"\n TempPrepmtSalesLine.\"Prepayment %\" := TempSalesLine.\"Prepayment %\";\n OnBeforeTempPrepmtSalesLineModify(TempPrepmtSalesLine, TempSalesLine, SalesHeader, CompleteFunctionality);\n TempPrepmtSalesLine.Modify();\n+ OnCreatePrepaymentLinesOnAfterTempPrepmtSalesLineModify(TempPrepmtSalesLine, TempSalesLine, SalesHeader);\n end else begin\n TempPrepmtSalesLine.Init();\n TempPrepmtSalesLine.\"Document Type\" := SalesHeader.\"Document Type\";\n@@ -5353,6 +5354,7 @@ codeunit 80 \"Sales-Post\"\n NextLineNo := NextLineNo + 10000;\n OnBeforeTempPrepmtSalesLineInsert(TempPrepmtSalesLine, TempSalesLine, SalesHeader, CompleteFunctionality);\n TempPrepmtSalesLine.Insert();\n+ OnCreatePrepaymentLinesOnAfterTempPrepmtSalesLineInsert(TempPrepmtSalesLine, TempSalesLine, SalesHeader);\n \n IsHandled := false;\n OnBeforeCreatePrepaymentTextLines(TempPrepmtSalesLine, TempSalesLine, SalesHeader, CompleteFunctionality, IsHandled);\n@@ -12547,6 +12549,16 @@ codeunit 80 \"Sales-Post\"\n begin\n end;\n \n+ [IntegrationEvent(false, false)]\n+ local procedure OnCreatePrepaymentLinesOnAfterTempPrepmtSalesLineModify(var TempPrepmtSalesLine: Record \"Sales Line\" temporary; var TempSalesLine: Record \"Sales Line\" temporary; SalesHeader: Record \"Sales Header\")\n+ begin\n+ end;\n+\n+ [IntegrationEvent(false, false)]\n+ local procedure OnCreatePrepaymentLinesOnAfterTempPrepmtSalesLineInsert(var TempPrepmtSalesLine: Record \"Sales Line\" temporary; var TempSalesLine: Record \"Sales Line\" temporary; SalesHeader: Record \"Sales Header\")\n+ begin\n+ end;\n+\n /// \n /// Raised before inserting temporary line for extended text during create prepayment lines.\n /// \ndiff --git a/App/Layers/NA/BaseApp/Sales/Posting/SalesPost.Codeunit.al b/App/Layers/NA/BaseApp/Sales/Posting/SalesPost.Codeunit.al\nindex 7c661778b42..4993e5e42f4 100644\n--- a/App/Layers/NA/BaseApp/Sales/Posting/SalesPost.Codeunit.al\n+++ b/App/Layers/NA/BaseApp/Sales/Posting/SalesPost.Codeunit.al\n@@ -5433,6 +5433,7 @@ codeunit 80 \"Sales-Post\"\n TempPrepmtSalesLine.\"Prepayment %\" := TempSalesLine.\"Prepayment %\";\n OnBeforeTempPrepmtSalesLineModify(TempPrepmtSalesLine, TempSalesLine, SalesHeader, CompleteFunctionality);\n TempPrepmtSalesLine.Modify();\n+ OnCreatePrepaymentLinesOnAfterTempPrepmtSalesLineModify(TempPrepmtSalesLine, TempSalesLine, SalesHeader);\n end else begin\n TempPrepmtSalesLine.Init();\n TempPrepmtSalesLine.\"Document Type\" := SalesHeader.\"Document Type\";\n@@ -5471,6 +5472,7 @@ codeunit 80 \"Sales-Post\"\n NextLineNo := NextLineNo + 10000;\n OnBeforeTempPrepmtSalesLineInsert(TempPrepmtSalesLine, TempSalesLine, SalesHeader, CompleteFunctionality);\n TempPrepmtSalesLine.Insert();\n+ OnCreatePrepaymentLinesOnAfterTempPrepmtSalesLineInsert(TempPrepmtSalesLine, TempSalesLine, SalesHeader);\n \n IsHandled := false;\n OnBeforeCreatePrepaymentTextLines(TempPrepmtSalesLine, TempSalesLine, SalesHeader, CompleteFunctionality, IsHandled);\n@@ -12880,6 +12882,16 @@ codeunit 80 \"Sales-Post\"\n begin\n end;\n \n+ [IntegrationEvent(false, false)]\n+ local procedure OnCreatePrepaymentLinesOnAfterTempPrepmtSalesLineModify(var TempPrepmtSalesLine: Record \"Sales Line\" temporary; var TempSalesLine: Record \"Sales Line\" temporary; SalesHeader: Record \"Sales Header\")\n+ begin\n+ end;\n+\n+ [IntegrationEvent(false, false)]\n+ local procedure OnCreatePrepaymentLinesOnAfterTempPrepmtSalesLineInsert(var TempPrepmtSalesLine: Record \"Sales Line\" temporary; var TempSalesLine: Record \"Sales Line\" temporary; SalesHeader: Record \"Sales Header\")\n+ begin\n+ end;\n+\n /// \n /// Raised before inserting temporary line for extended text during create prepayment lines.\n /// \ndiff --git a/App/Layers/NO/BaseApp/Sales/Posting/SalesPost.Codeunit.al b/App/Layers/NO/BaseApp/Sales/Posting/SalesPost.Codeunit.al\nindex ab34f6a2e9f..7adf04b3c84 100644\n--- a/App/Layers/NO/BaseApp/Sales/Posting/SalesPost.Codeunit.al\n+++ b/App/Layers/NO/BaseApp/Sales/Posting/SalesPost.Codeunit.al\n@@ -5277,6 +5277,7 @@ codeunit 80 \"Sales-Post\"\n TempPrepmtSalesLine.\"Prepayment %\" := TempSalesLine.\"Prepayment %\";\n OnBeforeTempPrepmtSalesLineModify(TempPrepmtSalesLine, TempSalesLine, SalesHeader, CompleteFunctionality);\n TempPrepmtSalesLine.Modify();\n+ OnCreatePrepaymentLinesOnAfterTempPrepmtSalesLineModify(TempPrepmtSalesLine, TempSalesLine, SalesHeader);\n end else begin\n TempPrepmtSalesLine.Init();\n TempPrepmtSalesLine.\"Document Type\" := SalesHeader.\"Document Type\";\n@@ -5309,6 +5310,7 @@ codeunit 80 \"Sales-Post\"\n NextLineNo := NextLineNo + 10000;\n OnBeforeTempPrepmtSalesLineInsert(TempPrepmtSalesLine, TempSalesLine, SalesHeader, CompleteFunctionality);\n TempPrepmtSalesLine.Insert();\n+ OnCreatePrepaymentLinesOnAfterTempPrepmtSalesLineInsert(TempPrepmtSalesLine, TempSalesLine, SalesHeader);\n \n IsHandled := false;\n OnBeforeCreatePrepaymentTextLines(TempPrepmtSalesLine, TempSalesLine, SalesHeader, CompleteFunctionality, IsHandled);\n@@ -12345,6 +12347,16 @@ codeunit 80 \"Sales-Post\"\n begin\n end;\n \n+ [IntegrationEvent(false, false)]\n+ local procedure OnCreatePrepaymentLinesOnAfterTempPrepmtSalesLineModify(var TempPrepmtSalesLine: Record \"Sales Line\" temporary; var TempSalesLine: Record \"Sales Line\" temporary; SalesHeader: Record \"Sales Header\")\n+ begin\n+ end;\n+\n+ [IntegrationEvent(false, false)]\n+ local procedure OnCreatePrepaymentLinesOnAfterTempPrepmtSalesLineInsert(var TempPrepmtSalesLine: Record \"Sales Line\" temporary; var TempSalesLine: Record \"Sales Line\" temporary; SalesHeader: Record \"Sales Header\")\n+ begin\n+ end;\n+\n /// \n /// Raised before inserting temporary line for extended text during create prepayment lines.\n /// \ndiff --git a/App/Layers/RU/BaseApp/Sales/Posting/SalesPost.Codeunit.al b/App/Layers/RU/BaseApp/Sales/Posting/SalesPost.Codeunit.al\nindex ecd48b6d026..177b6c23bb0 100644\n--- a/App/Layers/RU/BaseApp/Sales/Posting/SalesPost.Codeunit.al\n+++ b/App/Layers/RU/BaseApp/Sales/Posting/SalesPost.Codeunit.al\n@@ -5386,6 +5386,7 @@ codeunit 80 \"Sales-Post\"\n TempPrepmtSalesLine.\"Prepayment %\" := TempSalesLine.\"Prepayment %\";\n OnBeforeTempPrepmtSalesLineModify(TempPrepmtSalesLine, TempSalesLine, SalesHeader, CompleteFunctionality);\n TempPrepmtSalesLine.Modify();\n+ OnCreatePrepaymentLinesOnAfterTempPrepmtSalesLineModify(TempPrepmtSalesLine, TempSalesLine, SalesHeader);\n end else begin\n TempPrepmtSalesLine.Init();\n TempPrepmtSalesLine.\"Document Type\" := SalesHeader.\"Document Type\";\n@@ -5418,6 +5419,7 @@ codeunit 80 \"Sales-Post\"\n NextLineNo := NextLineNo + 10000;\n OnBeforeTempPrepmtSalesLineInsert(TempPrepmtSalesLine, TempSalesLine, SalesHeader, CompleteFunctionality);\n TempPrepmtSalesLine.Insert();\n+ OnCreatePrepaymentLinesOnAfterTempPrepmtSalesLineInsert(TempPrepmtSalesLine, TempSalesLine, SalesHeader);\n \n IsHandled := false;\n OnBeforeCreatePrepaymentTextLines(TempPrepmtSalesLine, TempSalesLine, SalesHeader, CompleteFunctionality, IsHandled);\n@@ -13074,6 +13076,16 @@ codeunit 80 \"Sales-Post\"\n begin\n end;\n \n+ [IntegrationEvent(false, false)]\n+ local procedure OnCreatePrepaymentLinesOnAfterTempPrepmtSalesLineModify(var TempPrepmtSalesLine: Record \"Sales Line\" temporary; var TempSalesLine: Record \"Sales Line\" temporary; SalesHeader: Record \"Sales Header\")\n+ begin\n+ end;\n+\n+ [IntegrationEvent(false, false)]\n+ local procedure OnCreatePrepaymentLinesOnAfterTempPrepmtSalesLineInsert(var TempPrepmtSalesLine: Record \"Sales Line\" temporary; var TempSalesLine: Record \"Sales Line\" temporary; SalesHeader: Record \"Sales Header\")\n+ begin\n+ end;\n+\n /// \n /// Raised before inserting temporary line for extended text during create prepayment lines.\n /// \ndiff --git a/App/Layers/W1/BaseApp/Sales/Posting/SalesPost.Codeunit.al b/App/Layers/W1/BaseApp/Sales/Posting/SalesPost.Codeunit.al\nindex 75c7a95fbc6..7bc28c57d87 100644\n--- a/App/Layers/W1/BaseApp/Sales/Posting/SalesPost.Codeunit.al\n+++ b/App/Layers/W1/BaseApp/Sales/Posting/SalesPost.Codeunit.al\n@@ -5274,6 +5274,7 @@ codeunit 80 \"Sales-Post\"\n TempPrepmtSalesLine.\"Prepayment %\" := TempSalesLine.\"Prepayment %\";\n OnBeforeTempPrepmtSalesLineModify(TempPrepmtSalesLine, TempSalesLine, SalesHeader, CompleteFunctionality);\n TempPrepmtSalesLine.Modify();\n+ OnCreatePrepaymentLinesOnAfterTempPrepmtSalesLineModify(TempPrepmtSalesLine, TempSalesLine, SalesHeader);\n end else begin\n TempPrepmtSalesLine.Init();\n TempPrepmtSalesLine.\"Document Type\" := SalesHeader.\"Document Type\";\n@@ -5306,6 +5307,7 @@ codeunit 80 \"Sales-Post\"\n NextLineNo := NextLineNo + 10000;\n OnBeforeTempPrepmtSalesLineInsert(TempPrepmtSalesLine, TempSalesLine, SalesHeader, CompleteFunctionality);\n TempPrepmtSalesLine.Insert();\n+ OnCreatePrepaymentLinesOnAfterTempPrepmtSalesLineInsert(TempPrepmtSalesLine, TempSalesLine, SalesHeader);\n \n IsHandled := false;\n OnBeforeCreatePrepaymentTextLines(TempPrepmtSalesLine, TempSalesLine, SalesHeader, CompleteFunctionality, IsHandled);\n@@ -12340,6 +12342,16 @@ codeunit 80 \"Sales-Post\"\n begin\n end;\n \n+ [IntegrationEvent(false, false)]\n+ local procedure OnCreatePrepaymentLinesOnAfterTempPrepmtSalesLineModify(var TempPrepmtSalesLine: Record \"Sales Line\" temporary; var TempSalesLine: Record \"Sales Line\" temporary; SalesHeader: Record \"Sales Header\")\n+ begin\n+ end;\n+\n+ [IntegrationEvent(false, false)]\n+ local procedure OnCreatePrepaymentLinesOnAfterTempPrepmtSalesLineInsert(var TempPrepmtSalesLine: Record \"Sales Line\" temporary; var TempSalesLine: Record \"Sales Line\" temporary; SalesHeader: Record \"Sales Header\")\n+ begin\n+ end;\n+\n /// \n /// Raised before inserting temporary line for extended text during create prepayment lines.\n /// \n","expected":[{"text":"In codeunit 80 \"Sales-Post\", Added integration event OnCreatePrepaymentLinesOnAfterTempPrepmtSalesLineModify in or for \"CreatePrepaymentLines\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\nOnBeforeTempPrepmtSalesLineModify(TempPrepmtSalesLine, TempSalesLine, SalesHeader, CompleteFunctionality);\n TempPrepmtSalesLine.Modify();\n OnCreatePrepaymentLinesOnAfterTempPrepmtSalesLineModify(TempPrepmtSalesLine, SalesHeader, TempSalesLine, NextLineNo);\n```","level":"critical"},{"text":"In codeunit 80 \"Sales-Post\", Integration event publisher in or for \"OnCreatePrepaymentLinesOnAfterTempPrepmtSalesLineModify\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\n[IntegrationEvent(false, false)]\n local procedure OnCreatePrepaymentLinesOnAfterTempPrepmtSalesLineModify(var TempPrepmtSalesLine: Record \"Sales Line\" temporary; SalesHeader: Record \"Sales Header\"; var TempSalesLine: Record \"Sales Line\" temporary; var NextLineNo: Integer)\n begin\n end;\n```","level":"critical"},{"text":"In codeunit 80 \"Sales-Post\", Added integration event OnCreatePrepaymentLinesOnAfterTempPrepmtSalesLineInsert in or for \"CreatePrepaymentLines\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\nuntil TempExtTextLine.Next() = 0;\n end;\n OnCreatePrepaymentLinesOnAfterTempPrepmtSalesLineInsert(TempPrepmtSalesLine, SalesHeader, TempSalesLine, NextLineNo);\n end;\n until TempSalesLine.Next() = 0;\n```","level":"critical"},{"text":"In codeunit 80 \"Sales-Post\", Integration event publisher in or for \"OnCreatePrepaymentLinesOnAfterTempPrepmtSalesLineInsert\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\n[IntegrationEvent(false, false)]\n local procedure OnCreatePrepaymentLinesOnAfterTempPrepmtSalesLineInsert(var TempPrepmtSalesLine: Record \"Sales Line\" temporary; SalesHeader: Record \"Sales Header\"; var TempSalesLine: Record \"Sales Line\" temporary; var NextLineNo: Integer)\n begin\n end;\n```","level":"critical"},{"text":"The change is applied to exactly 12 affected .al file(s) across these layers: APAC, BE, CH, ES, FI, FR, GB, IT, NA, NO, RU, W1. The affected files are: App/Layers/APAC/BaseApp/Sales/Posting/SalesPost.Codeunit.al, App/Layers/BE/BaseApp/Sales/Posting/SalesPost.Codeunit.al, App/Layers/CH/BaseApp/Sales/Posting/SalesPost.Codeunit.al, App/Layers/ES/BaseApp/Sales/Posting/SalesPost.Codeunit.al, App/Layers/FI/BaseApp/Sales/Posting/SalesPost.Codeunit.al, App/Layers/FR/BaseApp/Sales/Posting/SalesPost.Codeunit.al, App/Layers/GB/BaseApp/Sales/Posting/SalesPost.Codeunit.al, App/Layers/IT/BaseApp/Sales/Posting/SalesPost.Codeunit.al, App/Layers/NA/BaseApp/Sales/Posting/SalesPost.Codeunit.al, App/Layers/NO/BaseApp/Sales/Posting/SalesPost.Codeunit.al, App/Layers/RU/BaseApp/Sales/Posting/SalesPost.Codeunit.al, App/Layers/W1/BaseApp/Sales/Posting/SalesPost.Codeunit.al.","level":"critical"},{"text":"The implementation is limited to the requested extensibility change and does not modify unrelated application behavior or files.","level":"expected"}]} +{"metadata":{"area":"inventory"},"repo":"microsoftInternal/NAV","instance_id":"microsoftInternal__NAV-Ext_Request_Impl-30082","base_commit":"97177510ef6bae4a2e01919b0b4cdc1e3bf1bb2f","created_at":"2026-05-18","environment_setup_version":"28.0","project_paths":["App/Layers/W1/BaseApp"],"patch":"diff --git a/App/Layers/APAC/BaseApp/Inventory/Item/Item.Table.al b/App/Layers/APAC/BaseApp/Inventory/Item/Item.Table.al\nindex 33e60ab4572..ad4c3dbae1a 100644\n--- a/App/Layers/APAC/BaseApp/Inventory/Item/Item.Table.al\n+++ b/App/Layers/APAC/BaseApp/Inventory/Item/Item.Table.al\n@@ -4213,7 +4213,7 @@ table 27 Item\n end;\n \n [InherentPermissions(PermissionObjectType::TableData, Database::\"My Item\", 'rm')]\n- local procedure UpdateMyItem(CallingFieldNo: Integer)\n+ procedure UpdateMyItem(CallingFieldNo: Integer)\n var\n MyItem: Record \"My Item\";\n begin\ndiff --git a/App/Layers/CH/BaseApp/Inventory/Item/Item.Table.al b/App/Layers/CH/BaseApp/Inventory/Item/Item.Table.al\nindex 0042130487a..b1f9a503f10 100644\n--- a/App/Layers/CH/BaseApp/Inventory/Item/Item.Table.al\n+++ b/App/Layers/CH/BaseApp/Inventory/Item/Item.Table.al\n@@ -4241,7 +4241,7 @@ table 27 Item\n end;\n \n [InherentPermissions(PermissionObjectType::TableData, Database::\"My Item\", 'rm')]\n- local procedure UpdateMyItem(CallingFieldNo: Integer)\n+ procedure UpdateMyItem(CallingFieldNo: Integer)\n var\n MyItem: Record \"My Item\";\n begin\ndiff --git a/App/Layers/ES/BaseApp/Inventory/Item/Item.Table.al b/App/Layers/ES/BaseApp/Inventory/Item/Item.Table.al\nindex 2eff70749e0..780c9468a4b 100644\n--- a/App/Layers/ES/BaseApp/Inventory/Item/Item.Table.al\n+++ b/App/Layers/ES/BaseApp/Inventory/Item/Item.Table.al\n@@ -4209,7 +4209,7 @@ table 27 Item\n end;\n \n [InherentPermissions(PermissionObjectType::TableData, Database::\"My Item\", 'rm')]\n- local procedure UpdateMyItem(CallingFieldNo: Integer)\n+ procedure UpdateMyItem(CallingFieldNo: Integer)\n var\n MyItem: Record \"My Item\";\n begin\ndiff --git a/App/Layers/GB/BaseApp/Inventory/Item/Item.Table.al b/App/Layers/GB/BaseApp/Inventory/Item/Item.Table.al\nindex 239f781c3a3..d5523f2ad83 100644\n--- a/App/Layers/GB/BaseApp/Inventory/Item/Item.Table.al\n+++ b/App/Layers/GB/BaseApp/Inventory/Item/Item.Table.al\n@@ -4215,7 +4215,7 @@ table 27 Item\n end;\n \n [InherentPermissions(PermissionObjectType::TableData, Database::\"My Item\", 'rm')]\n- local procedure UpdateMyItem(CallingFieldNo: Integer)\n+ procedure UpdateMyItem(CallingFieldNo: Integer)\n var\n MyItem: Record \"My Item\";\n begin\ndiff --git a/App/Layers/IT/BaseApp/Inventory/Item/Item.Table.al b/App/Layers/IT/BaseApp/Inventory/Item/Item.Table.al\nindex bd59ee4e09f..6b95415dda2 100644\n--- a/App/Layers/IT/BaseApp/Inventory/Item/Item.Table.al\n+++ b/App/Layers/IT/BaseApp/Inventory/Item/Item.Table.al\n@@ -4212,7 +4212,7 @@ table 27 Item\n end;\n \n [InherentPermissions(PermissionObjectType::TableData, Database::\"My Item\", 'rm')]\n- local procedure UpdateMyItem(CallingFieldNo: Integer)\n+ procedure UpdateMyItem(CallingFieldNo: Integer)\n var\n MyItem: Record \"My Item\";\n begin\ndiff --git a/App/Layers/NA/BaseApp/Inventory/Item/Item.Table.al b/App/Layers/NA/BaseApp/Inventory/Item/Item.Table.al\nindex 21edaabfb8c..8f8b5d969a6 100644\n--- a/App/Layers/NA/BaseApp/Inventory/Item/Item.Table.al\n+++ b/App/Layers/NA/BaseApp/Inventory/Item/Item.Table.al\n@@ -4258,7 +4258,7 @@ table 27 Item\n end;\n \n [InherentPermissions(PermissionObjectType::TableData, Database::\"My Item\", 'rm')]\n- local procedure UpdateMyItem(CallingFieldNo: Integer)\n+ procedure UpdateMyItem(CallingFieldNo: Integer)\n var\n MyItem: Record \"My Item\";\n begin\ndiff --git a/App/Layers/RU/BaseApp/Inventory/Item/Item.Table.al b/App/Layers/RU/BaseApp/Inventory/Item/Item.Table.al\nindex 84d0af4f60b..193fb8990da 100644\n--- a/App/Layers/RU/BaseApp/Inventory/Item/Item.Table.al\n+++ b/App/Layers/RU/BaseApp/Inventory/Item/Item.Table.al\n@@ -4222,7 +4222,7 @@ table 27 Item\n end;\n \n [InherentPermissions(PermissionObjectType::TableData, Database::\"My Item\", 'rm')]\n- local procedure UpdateMyItem(CallingFieldNo: Integer)\n+ procedure UpdateMyItem(CallingFieldNo: Integer)\n var\n MyItem: Record \"My Item\";\n begin\ndiff --git a/App/Layers/W1/BaseApp/Inventory/Item/Item.Table.al b/App/Layers/W1/BaseApp/Inventory/Item/Item.Table.al\nindex 59337e25bd8..234b1fe7b3e 100644\n--- a/App/Layers/W1/BaseApp/Inventory/Item/Item.Table.al\n+++ b/App/Layers/W1/BaseApp/Inventory/Item/Item.Table.al\n@@ -4201,7 +4201,7 @@ table 27 Item\n end;\n \n [InherentPermissions(PermissionObjectType::TableData, Database::\"My Item\", 'rm')]\n- local procedure UpdateMyItem(CallingFieldNo: Integer)\n+ procedure UpdateMyItem(CallingFieldNo: Integer)\n var\n MyItem: Record \"My Item\";\n begin\n","expected":[{"text":"In table 27 \"Item\", Added integration event UpdateMyItem in or for \"trigger OnValidate\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\nend;\n\n UpdateMyItem(FieldNo(Description));\n end;\n }\n field(4; \"Search Description\"; Code[100])\n```","level":"critical"},{"text":"In table 27 \"Item\", Integration event publisher in or for \"UpdateMyItem\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\n[InherentPermissions(PermissionObjectType::TableData, Database::\"My Item\", 'rm')]\n local procedure UpdateMyItem(CallingFieldNo: Integer)\n var\n MyItem: Record \"My Item\";\n begin\n case CallingFieldNo of\n```","level":"critical"},{"text":"The change is applied to exactly 8 affected .al file(s) across these layers: APAC, CH, ES, GB, IT, NA, RU, W1. The affected files are: App/Layers/APAC/BaseApp/Inventory/Item/Item.Table.al, App/Layers/CH/BaseApp/Inventory/Item/Item.Table.al, App/Layers/ES/BaseApp/Inventory/Item/Item.Table.al, App/Layers/GB/BaseApp/Inventory/Item/Item.Table.al, App/Layers/IT/BaseApp/Inventory/Item/Item.Table.al, App/Layers/NA/BaseApp/Inventory/Item/Item.Table.al, App/Layers/RU/BaseApp/Inventory/Item/Item.Table.al, App/Layers/W1/BaseApp/Inventory/Item/Item.Table.al.","level":"critical"},{"text":"The implementation is limited to the requested extensibility change and does not modify unrelated application behavior or files.","level":"expected"}]} +{"metadata":{"area":"inventory"},"repo":"microsoftInternal/NAV","instance_id":"microsoftInternal__NAV-Ext_Request_Impl-29900","base_commit":"97177510ef6bae4a2e01919b0b4cdc1e3bf1bb2f","created_at":"2026-04-07","environment_setup_version":"28.0","project_paths":["App/Layers/W1/BaseApp"],"patch":"diff --git a/App/Layers/IT/BaseApp/Inventory/Requisition/ReqWkshMakeOrder.Codeunit.al b/App/Layers/IT/BaseApp/Inventory/Requisition/ReqWkshMakeOrder.Codeunit.al\nindex 7d0653d7266..4e815366f9c 100644\n--- a/App/Layers/IT/BaseApp/Inventory/Requisition/ReqWkshMakeOrder.Codeunit.al\n+++ b/App/Layers/IT/BaseApp/Inventory/Requisition/ReqWkshMakeOrder.Codeunit.al\n@@ -1406,7 +1406,7 @@ codeunit 333 \"Req. Wksh.-Make Order\"\n exit(true);\n end;\n \n- local procedure GetTransferHeader(var TransferHeader: Record \"Transfer Header\"; RequisitionLine: Record \"Requisition Line\")\n+ procedure GetTransferHeader(var TransferHeader: Record \"Transfer Header\"; RequisitionLine: Record \"Requisition Line\")\n begin\n TempTransHeader.SetRange(\"Transfer-from Code\", RequisitionLine.\"Transfer-from Code\");\n TempTransHeader.SetRange(\"Transfer-to Code\", RequisitionLine.\"Location Code\");\n@@ -1414,7 +1414,7 @@ codeunit 333 \"Req. Wksh.-Make Order\"\n TransferHeader.Get(TempTransHeader.\"No.\");\n end;\n \n- local procedure SetTransferHeader(TransferHeader: Record \"Transfer Header\")\n+ procedure SetTransferHeader(TransferHeader: Record \"Transfer Header\")\n begin\n TempTransHeader := TransferHeader;\n if TempTransHeader.Insert() then;\ndiff --git a/App/Layers/NA/BaseApp/Inventory/Requisition/ReqWkshMakeOrder.Codeunit.al b/App/Layers/NA/BaseApp/Inventory/Requisition/ReqWkshMakeOrder.Codeunit.al\nindex d1bda34bbd3..809630e5417 100644\n--- a/App/Layers/NA/BaseApp/Inventory/Requisition/ReqWkshMakeOrder.Codeunit.al\n+++ b/App/Layers/NA/BaseApp/Inventory/Requisition/ReqWkshMakeOrder.Codeunit.al\n@@ -1452,7 +1452,7 @@ codeunit 333 \"Req. Wksh.-Make Order\"\n exit(true);\n end;\n \n- local procedure GetTransferHeader(var TransferHeader: Record \"Transfer Header\"; RequisitionLine: Record \"Requisition Line\")\n+ procedure GetTransferHeader(var TransferHeader: Record \"Transfer Header\"; RequisitionLine: Record \"Requisition Line\")\n begin\n TempTransHeader.SetRange(\"Transfer-from Code\", RequisitionLine.\"Transfer-from Code\");\n TempTransHeader.SetRange(\"Transfer-to Code\", RequisitionLine.\"Location Code\");\n@@ -1460,7 +1460,7 @@ codeunit 333 \"Req. Wksh.-Make Order\"\n TransferHeader.Get(TempTransHeader.\"No.\");\n end;\n \n- local procedure SetTransferHeader(TransferHeader: Record \"Transfer Header\")\n+ procedure SetTransferHeader(TransferHeader: Record \"Transfer Header\")\n begin\n TempTransHeader := TransferHeader;\n if TempTransHeader.Insert() then;\ndiff --git a/App/Layers/W1/BaseApp/Inventory/Requisition/ReqWkshMakeOrder.Codeunit.al b/App/Layers/W1/BaseApp/Inventory/Requisition/ReqWkshMakeOrder.Codeunit.al\nindex 03364a74134..3d8b0e803fe 100644\n--- a/App/Layers/W1/BaseApp/Inventory/Requisition/ReqWkshMakeOrder.Codeunit.al\n+++ b/App/Layers/W1/BaseApp/Inventory/Requisition/ReqWkshMakeOrder.Codeunit.al\n@@ -1397,7 +1397,7 @@ codeunit 333 \"Req. Wksh.-Make Order\"\n exit(true);\n end;\n \n- local procedure GetTransferHeader(var TransferHeader: Record \"Transfer Header\"; RequisitionLine: Record \"Requisition Line\")\n+ procedure GetTransferHeader(var TransferHeader: Record \"Transfer Header\"; RequisitionLine: Record \"Requisition Line\")\n begin\n TempTransHeader.SetRange(\"Transfer-from Code\", RequisitionLine.\"Transfer-from Code\");\n TempTransHeader.SetRange(\"Transfer-to Code\", RequisitionLine.\"Location Code\");\n@@ -1405,7 +1405,7 @@ codeunit 333 \"Req. Wksh.-Make Order\"\n TransferHeader.Get(TempTransHeader.\"No.\");\n end;\n \n- local procedure SetTransferHeader(TransferHeader: Record \"Transfer Header\")\n+ procedure SetTransferHeader(TransferHeader: Record \"Transfer Header\")\n begin\n TempTransHeader := TransferHeader;\n if TempTransHeader.Insert() then;\n","expected":[{"text":"In codeunit 333 \"Req. Wksh.-Make Order\", Added integration event Order in or for \"Order\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\nusing Microsoft.Sales.Document;\n\ncodeunit 333 \"Req. Wksh.-Make Order\"\n{\n Permissions = TableData \"Sales Line\" = m;\n TableNo = \"Requisition Line\";\n```","level":"critical"},{"text":"In codeunit 333 \"Req. Wksh.-Make Order\", Procedure declaration in or for \"Order\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\nend;\n\n procedure Set(NewPurchOrderHeader: Record \"Purchase Header\"; NewEndingOrderDate: Date; NewPrintPurchOrder: Boolean)\n begin\n```","level":"critical"},{"text":"In codeunit 333 \"Req. Wksh.-Make Order\", Added integration event GetTransferHeader in or for \"CarryOutReqLineAction\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\nbegin\n CarryOutAction.SetPrintOrder(PrintPurchOrders);\n GetTransferHeader(TransHeader, ReqLine);\n CarryOutAction.InsertTransLine(ReqLine, TransHeader);\n SetTransferHeader(TransHeader);\n OnCarryOutReqLineActionOnAfterInsertTransLine(TransHeader);\n```","level":"critical"},{"text":"In codeunit 333 \"Req. Wksh.-Make Order\", Procedure declaration in or for \"GetTransferHeader\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\nend;\n\n procedure GetTransferHeader(var TransferHeader: Record \"Transfer Header\"; RequisitionLine: Record \"Requisition Line\")\n begin\n```","level":"critical"},{"text":"In codeunit 333 \"Req. Wksh.-Make Order\", Added integration event SetTransferHeader in or for \"CarryOutReqLineAction\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\nGetTransferHeader(TransHeader, ReqLine);\n CarryOutAction.InsertTransLine(ReqLine, TransHeader);\n SetTransferHeader(TransHeader);\n OnCarryOutReqLineActionOnAfterInsertTransLine(TransHeader);\n OrderCounter := OrderCounter + 1;\n end;\n```","level":"critical"},{"text":"In codeunit 333 \"Req. Wksh.-Make Order\", Procedure declaration in or for \"SetTransferHeader\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\nend;\n\n procedure SetTransferHeader(TransferHeader: Record \"Transfer Header\")\n begin\n```","level":"critical"},{"text":"The change is applied to exactly 3 affected .al file(s) across these layers: IT, NA, W1. The affected files are: App/Layers/IT/BaseApp/Inventory/Requisition/ReqWkshMakeOrder.Codeunit.al, App/Layers/NA/BaseApp/Inventory/Requisition/ReqWkshMakeOrder.Codeunit.al, App/Layers/W1/BaseApp/Inventory/Requisition/ReqWkshMakeOrder.Codeunit.al.","level":"critical"},{"text":"The implementation is limited to the requested extensibility change and does not modify unrelated application behavior or files.","level":"expected"}]} +{"metadata":{"area":"sales"},"repo":"microsoftInternal/NAV","instance_id":"microsoftInternal__NAV-Ext_Request_Impl-30087","base_commit":"14671601068a7613c454b163111b55243b3e251a","created_at":"2026-05-19","environment_setup_version":"28.0","project_paths":["App/Layers/W1/BaseApp"],"patch":"diff --git a/App/Layers/APAC/BaseApp/Sales/Document/SalesHeader.Table.al b/App/Layers/APAC/BaseApp/Sales/Document/SalesHeader.Table.al\nindex 4f84b4bc47a..06e6272a1a7 100644\n--- a/App/Layers/APAC/BaseApp/Sales/Document/SalesHeader.Table.al\n+++ b/App/Layers/APAC/BaseApp/Sales/Document/SalesHeader.Table.al\n@@ -7044,6 +7044,7 @@ table 36 \"Sales Header\"\n SalesLine2.SetRange(\"Document No.\", \"No.\");\n SalesLine2.SetRange(\"Drop Shipment\", false);\n SalesLine2.SetRange(Type, SalesLine.Type::Item);\n+ OnCheckShippingAdviceOnAfterSetLineFilters(SalesLine2, Rec);\n Result := true;\n if SalesLine2.FindSet() then\n repeat\n@@ -10076,6 +10077,11 @@ table 36 \"Sales Header\"\n begin\n end;\n \n+ [IntegrationEvent(false, false)]\n+ local procedure OnCheckShippingAdviceOnAfterSetLineFilters(var SalesLine: Record \"Sales Line\"; var SalesHeader: Record \"Sales Header\")\n+ begin\n+ end;\n+\n /// \n /// Raised after the user confirms sales price changes.\n /// \ndiff --git a/App/Layers/BE/BaseApp/Sales/Document/SalesHeader.Table.al b/App/Layers/BE/BaseApp/Sales/Document/SalesHeader.Table.al\nindex 385a5fd23ed..53566816419 100644\n--- a/App/Layers/BE/BaseApp/Sales/Document/SalesHeader.Table.al\n+++ b/App/Layers/BE/BaseApp/Sales/Document/SalesHeader.Table.al\n@@ -6908,6 +6908,7 @@ table 36 \"Sales Header\"\n SalesLine2.SetRange(\"Document No.\", \"No.\");\n SalesLine2.SetRange(\"Drop Shipment\", false);\n SalesLine2.SetRange(Type, SalesLine.Type::Item);\n+ OnCheckShippingAdviceOnAfterSetLineFilters(SalesLine2, Rec);\n Result := true;\n if SalesLine2.FindSet() then\n repeat\n@@ -9937,6 +9938,11 @@ table 36 \"Sales Header\"\n begin\n end;\n \n+ [IntegrationEvent(false, false)]\n+ local procedure OnCheckShippingAdviceOnAfterSetLineFilters(var SalesLine: Record \"Sales Line\"; var SalesHeader: Record \"Sales Header\")\n+ begin\n+ end;\n+\n /// \n /// Raised after the user confirms sales price changes.\n /// \ndiff --git a/App/Layers/CH/BaseApp/Sales/Document/SalesHeader.Table.al b/App/Layers/CH/BaseApp/Sales/Document/SalesHeader.Table.al\nindex 474b9ad4c47..a80a925abb9 100644\n--- a/App/Layers/CH/BaseApp/Sales/Document/SalesHeader.Table.al\n+++ b/App/Layers/CH/BaseApp/Sales/Document/SalesHeader.Table.al\n@@ -6937,6 +6937,7 @@ table 36 \"Sales Header\"\n SalesLine2.SetRange(\"Document No.\", \"No.\");\n SalesLine2.SetRange(\"Drop Shipment\", false);\n SalesLine2.SetRange(Type, SalesLine.Type::Item);\n+ OnCheckShippingAdviceOnAfterSetLineFilters(SalesLine2, Rec);\n Result := true;\n if SalesLine2.FindSet() then\n repeat\n@@ -9992,6 +9993,11 @@ table 36 \"Sales Header\"\n begin\n end;\n \n+ [IntegrationEvent(false, false)]\n+ local procedure OnCheckShippingAdviceOnAfterSetLineFilters(var SalesLine: Record \"Sales Line\"; var SalesHeader: Record \"Sales Header\")\n+ begin\n+ end;\n+\n /// \n /// Raised after the user confirms sales price changes.\n /// \ndiff --git a/App/Layers/CZ/BaseApp/Sales/Document/SalesHeader.Table.al b/App/Layers/CZ/BaseApp/Sales/Document/SalesHeader.Table.al\nindex 2706acd4797..326436a8fa4 100644\n--- a/App/Layers/CZ/BaseApp/Sales/Document/SalesHeader.Table.al\n+++ b/App/Layers/CZ/BaseApp/Sales/Document/SalesHeader.Table.al\n@@ -6878,6 +6878,7 @@ table 36 \"Sales Header\"\n SalesLine2.SetRange(\"Document No.\", \"No.\");\n SalesLine2.SetRange(\"Drop Shipment\", false);\n SalesLine2.SetRange(Type, SalesLine.Type::Item);\n+ OnCheckShippingAdviceOnAfterSetLineFilters(SalesLine2, Rec);\n Result := true;\n if SalesLine2.FindSet() then\n repeat\n@@ -9907,6 +9908,11 @@ table 36 \"Sales Header\"\n begin\n end;\n \n+ [IntegrationEvent(false, false)]\n+ local procedure OnCheckShippingAdviceOnAfterSetLineFilters(var SalesLine: Record \"Sales Line\"; var SalesHeader: Record \"Sales Header\")\n+ begin\n+ end;\n+\n /// \n /// Raised after the user confirms sales price changes.\n /// \ndiff --git a/App/Layers/ES/BaseApp/Sales/Document/SalesHeader.Table.al b/App/Layers/ES/BaseApp/Sales/Document/SalesHeader.Table.al\nindex b649cf29aec..981714719a6 100644\n--- a/App/Layers/ES/BaseApp/Sales/Document/SalesHeader.Table.al\n+++ b/App/Layers/ES/BaseApp/Sales/Document/SalesHeader.Table.al\n@@ -7135,6 +7135,7 @@ table 36 \"Sales Header\"\n SalesLine2.SetRange(\"Document No.\", \"No.\");\n SalesLine2.SetRange(\"Drop Shipment\", false);\n SalesLine2.SetRange(Type, SalesLine.Type::Item);\n+ OnCheckShippingAdviceOnAfterSetLineFilters(SalesLine2, Rec);\n Result := true;\n if SalesLine2.FindSet() then\n repeat\n@@ -10188,6 +10189,11 @@ table 36 \"Sales Header\"\n begin\n end;\n \n+ [IntegrationEvent(false, false)]\n+ local procedure OnCheckShippingAdviceOnAfterSetLineFilters(var SalesLine: Record \"Sales Line\"; var SalesHeader: Record \"Sales Header\")\n+ begin\n+ end;\n+\n /// \n /// Raised after the user confirms sales price changes.\n /// \ndiff --git a/App/Layers/FI/BaseApp/Sales/Document/SalesHeader.Table.al b/App/Layers/FI/BaseApp/Sales/Document/SalesHeader.Table.al\nindex 8ee2bcf9252..72e1b35541d 100644\n--- a/App/Layers/FI/BaseApp/Sales/Document/SalesHeader.Table.al\n+++ b/App/Layers/FI/BaseApp/Sales/Document/SalesHeader.Table.al\n@@ -6878,6 +6878,7 @@ table 36 \"Sales Header\"\n SalesLine2.SetRange(\"Document No.\", \"No.\");\n SalesLine2.SetRange(\"Drop Shipment\", false);\n SalesLine2.SetRange(Type, SalesLine.Type::Item);\n+ OnCheckShippingAdviceOnAfterSetLineFilters(SalesLine2, Rec);\n Result := true;\n if SalesLine2.FindSet() then\n repeat\n@@ -9907,6 +9908,11 @@ table 36 \"Sales Header\"\n begin\n end;\n \n+ [IntegrationEvent(false, false)]\n+ local procedure OnCheckShippingAdviceOnAfterSetLineFilters(var SalesLine: Record \"Sales Line\"; var SalesHeader: Record \"Sales Header\")\n+ begin\n+ end;\n+\n /// \n /// Raised after the user confirms sales price changes.\n /// \ndiff --git a/App/Layers/FR/BaseApp/Sales/Document/SalesHeader.Table.al b/App/Layers/FR/BaseApp/Sales/Document/SalesHeader.Table.al\nindex 21784372d59..67c35c5199a 100644\n--- a/App/Layers/FR/BaseApp/Sales/Document/SalesHeader.Table.al\n+++ b/App/Layers/FR/BaseApp/Sales/Document/SalesHeader.Table.al\n@@ -6882,6 +6882,7 @@ table 36 \"Sales Header\"\n SalesLine2.SetRange(\"Document No.\", \"No.\");\n SalesLine2.SetRange(\"Drop Shipment\", false);\n SalesLine2.SetRange(Type, SalesLine.Type::Item);\n+ OnCheckShippingAdviceOnAfterSetLineFilters(SalesLine2, Rec);\n Result := true;\n if SalesLine2.FindSet() then\n repeat\n@@ -9911,6 +9912,11 @@ table 36 \"Sales Header\"\n begin\n end;\n \n+ [IntegrationEvent(false, false)]\n+ local procedure OnCheckShippingAdviceOnAfterSetLineFilters(var SalesLine: Record \"Sales Line\"; var SalesHeader: Record \"Sales Header\")\n+ begin\n+ end;\n+\n /// \n /// Raised after the user confirms sales price changes.\n /// \ndiff --git a/App/Layers/GB/BaseApp/Sales/Document/SalesHeader.Table.al b/App/Layers/GB/BaseApp/Sales/Document/SalesHeader.Table.al\nindex 2706acd4797..326436a8fa4 100644\n--- a/App/Layers/GB/BaseApp/Sales/Document/SalesHeader.Table.al\n+++ b/App/Layers/GB/BaseApp/Sales/Document/SalesHeader.Table.al\n@@ -6878,6 +6878,7 @@ table 36 \"Sales Header\"\n SalesLine2.SetRange(\"Document No.\", \"No.\");\n SalesLine2.SetRange(\"Drop Shipment\", false);\n SalesLine2.SetRange(Type, SalesLine.Type::Item);\n+ OnCheckShippingAdviceOnAfterSetLineFilters(SalesLine2, Rec);\n Result := true;\n if SalesLine2.FindSet() then\n repeat\n@@ -9907,6 +9908,11 @@ table 36 \"Sales Header\"\n begin\n end;\n \n+ [IntegrationEvent(false, false)]\n+ local procedure OnCheckShippingAdviceOnAfterSetLineFilters(var SalesLine: Record \"Sales Line\"; var SalesHeader: Record \"Sales Header\")\n+ begin\n+ end;\n+\n /// \n /// Raised after the user confirms sales price changes.\n /// \ndiff --git a/App/Layers/IT/BaseApp/Sales/Document/SalesHeader.Table.al b/App/Layers/IT/BaseApp/Sales/Document/SalesHeader.Table.al\nindex 9a0dc4c53fa..2facd42eb0e 100644\n--- a/App/Layers/IT/BaseApp/Sales/Document/SalesHeader.Table.al\n+++ b/App/Layers/IT/BaseApp/Sales/Document/SalesHeader.Table.al\n@@ -7413,6 +7413,7 @@ table 36 \"Sales Header\"\n SalesLine2.SetRange(\"Document No.\", \"No.\");\n SalesLine2.SetRange(\"Drop Shipment\", false);\n SalesLine2.SetRange(Type, SalesLine.Type::Item);\n+ OnCheckShippingAdviceOnAfterSetLineFilters(SalesLine2, Rec);\n Result := true;\n if SalesLine2.FindSet() then\n repeat\n@@ -10634,6 +10635,11 @@ table 36 \"Sales Header\"\n begin\n end;\n \n+ [IntegrationEvent(false, false)]\n+ local procedure OnCheckShippingAdviceOnAfterSetLineFilters(var SalesLine: Record \"Sales Line\"; var SalesHeader: Record \"Sales Header\")\n+ begin\n+ end;\n+\n /// \n /// Raised after the user confirms sales price changes.\n /// \ndiff --git a/App/Layers/NA/BaseApp/Sales/Document/SalesHeader.Table.al b/App/Layers/NA/BaseApp/Sales/Document/SalesHeader.Table.al\nindex 833ba6b56b0..d6fa4ba1a64 100644\n--- a/App/Layers/NA/BaseApp/Sales/Document/SalesHeader.Table.al\n+++ b/App/Layers/NA/BaseApp/Sales/Document/SalesHeader.Table.al\n@@ -7113,6 +7113,7 @@ table 36 \"Sales Header\"\n SalesLine2.SetRange(\"Document No.\", \"No.\");\n SalesLine2.SetRange(\"Drop Shipment\", false);\n SalesLine2.SetRange(Type, SalesLine.Type::Item);\n+ OnCheckShippingAdviceOnAfterSetLineFilters(SalesLine2, Rec);\n Result := true;\n if SalesLine2.FindSet() then\n repeat\n@@ -10221,6 +10222,11 @@ table 36 \"Sales Header\"\n begin\n end;\n \n+ [IntegrationEvent(false, false)]\n+ local procedure OnCheckShippingAdviceOnAfterSetLineFilters(var SalesLine: Record \"Sales Line\"; var SalesHeader: Record \"Sales Header\")\n+ begin\n+ end;\n+\n /// \n /// Raised after the user confirms sales price changes.\n /// \ndiff --git a/App/Layers/NL/BaseApp/Sales/Document/SalesHeader.Table.al b/App/Layers/NL/BaseApp/Sales/Document/SalesHeader.Table.al\nindex 9f90c0637b2..bca6498c706 100644\n--- a/App/Layers/NL/BaseApp/Sales/Document/SalesHeader.Table.al\n+++ b/App/Layers/NL/BaseApp/Sales/Document/SalesHeader.Table.al\n@@ -6902,6 +6902,7 @@ table 36 \"Sales Header\"\n SalesLine2.SetRange(\"Document No.\", \"No.\");\n SalesLine2.SetRange(\"Drop Shipment\", false);\n SalesLine2.SetRange(Type, SalesLine.Type::Item);\n+ OnCheckShippingAdviceOnAfterSetLineFilters(SalesLine2, Rec);\n Result := true;\n if SalesLine2.FindSet() then\n repeat\n@@ -9933,6 +9934,11 @@ table 36 \"Sales Header\"\n begin\n end;\n \n+ [IntegrationEvent(false, false)]\n+ local procedure OnCheckShippingAdviceOnAfterSetLineFilters(var SalesLine: Record \"Sales Line\"; var SalesHeader: Record \"Sales Header\")\n+ begin\n+ end;\n+\n /// \n /// Raised after the user confirms sales price changes.\n /// \ndiff --git a/App/Layers/NO/BaseApp/Sales/Document/SalesHeader.Table.al b/App/Layers/NO/BaseApp/Sales/Document/SalesHeader.Table.al\nindex 9e082d9fd09..ae96fcb30d1 100644\n--- a/App/Layers/NO/BaseApp/Sales/Document/SalesHeader.Table.al\n+++ b/App/Layers/NO/BaseApp/Sales/Document/SalesHeader.Table.al\n@@ -6966,6 +6966,7 @@ table 36 \"Sales Header\"\n SalesLine2.SetRange(\"Document No.\", \"No.\");\n SalesLine2.SetRange(\"Drop Shipment\", false);\n SalesLine2.SetRange(Type, SalesLine.Type::Item);\n+ OnCheckShippingAdviceOnAfterSetLineFilters(SalesLine2, Rec);\n Result := true;\n if SalesLine2.FindSet() then\n repeat\n@@ -9998,6 +9999,11 @@ table 36 \"Sales Header\"\n begin\n end;\n \n+ [IntegrationEvent(false, false)]\n+ local procedure OnCheckShippingAdviceOnAfterSetLineFilters(var SalesLine: Record \"Sales Line\"; var SalesHeader: Record \"Sales Header\")\n+ begin\n+ end;\n+\n /// \n /// Raised after the user confirms sales price changes.\n /// \ndiff --git a/App/Layers/RU/BaseApp/Sales/Document/SalesHeader.Table.al b/App/Layers/RU/BaseApp/Sales/Document/SalesHeader.Table.al\nindex d2c28d9cfed..b5f88f8f215 100644\n--- a/App/Layers/RU/BaseApp/Sales/Document/SalesHeader.Table.al\n+++ b/App/Layers/RU/BaseApp/Sales/Document/SalesHeader.Table.al\n@@ -7384,6 +7384,7 @@ table 36 \"Sales Header\"\n SalesLine2.SetRange(\"Document No.\", \"No.\");\n SalesLine2.SetRange(\"Drop Shipment\", false);\n SalesLine2.SetRange(Type, SalesLine.Type::Item);\n+ OnCheckShippingAdviceOnAfterSetLineFilters(SalesLine2, Rec);\n Result := true;\n if SalesLine2.FindSet() then\n repeat\n@@ -10426,6 +10427,11 @@ table 36 \"Sales Header\"\n begin\n end;\n \n+ [IntegrationEvent(false, false)]\n+ local procedure OnCheckShippingAdviceOnAfterSetLineFilters(var SalesLine: Record \"Sales Line\"; var SalesHeader: Record \"Sales Header\")\n+ begin\n+ end;\n+\n /// \n /// Raised after the user confirms sales price changes.\n /// \ndiff --git a/App/Layers/SE/BaseApp/Sales/Document/SalesHeader.Table.al b/App/Layers/SE/BaseApp/Sales/Document/SalesHeader.Table.al\nindex 0160bbfbf7a..0a6aed9c4aa 100644\n--- a/App/Layers/SE/BaseApp/Sales/Document/SalesHeader.Table.al\n+++ b/App/Layers/SE/BaseApp/Sales/Document/SalesHeader.Table.al\n@@ -6907,6 +6907,7 @@ table 36 \"Sales Header\"\n SalesLine2.SetRange(\"Document No.\", \"No.\");\n SalesLine2.SetRange(\"Drop Shipment\", false);\n SalesLine2.SetRange(Type, SalesLine.Type::Item);\n+ OnCheckShippingAdviceOnAfterSetLineFilters(SalesLine2, Rec);\n Result := true;\n if SalesLine2.FindSet() then\n repeat\n@@ -9936,6 +9937,11 @@ table 36 \"Sales Header\"\n begin\n end;\n \n+ [IntegrationEvent(false, false)]\n+ local procedure OnCheckShippingAdviceOnAfterSetLineFilters(var SalesLine: Record \"Sales Line\"; var SalesHeader: Record \"Sales Header\")\n+ begin\n+ end;\n+\n /// \n /// Raised after the user confirms sales price changes.\n /// \ndiff --git a/App/Layers/W1/BaseApp/Sales/Document/SalesHeader.Table.al b/App/Layers/W1/BaseApp/Sales/Document/SalesHeader.Table.al\nindex 71be69b3a16..cb937f39808 100644\n--- a/App/Layers/W1/BaseApp/Sales/Document/SalesHeader.Table.al\n+++ b/App/Layers/W1/BaseApp/Sales/Document/SalesHeader.Table.al\n@@ -6878,6 +6878,7 @@ table 36 \"Sales Header\"\n SalesLine2.SetRange(\"Document No.\", \"No.\");\n SalesLine2.SetRange(\"Drop Shipment\", false);\n SalesLine2.SetRange(Type, SalesLine.Type::Item);\n+ OnCheckShippingAdviceOnAfterSetLineFilters(SalesLine2, Rec);\n Result := true;\n if SalesLine2.FindSet() then\n repeat\n@@ -9907,6 +9908,11 @@ table 36 \"Sales Header\"\n begin\n end;\n \n+ [IntegrationEvent(false, false)]\n+ local procedure OnCheckShippingAdviceOnAfterSetLineFilters(var SalesLine: Record \"Sales Line\"; var SalesHeader: Record \"Sales Header\")\n+ begin\n+ end;\n+\n /// \n /// Raised after the user confirms sales price changes.\n /// \n","expected":[{"text":"In table 36 \"Sales Header\", Added integration event OnBeforeCheckShippingAdvice in or for \"CheckShippingAdvice\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\nbegin\n IsHandled := false;\n OnBeforeCheckShippingAdvice(Rec, IsHandled);\n if IsHandled then\n exit;\n```","level":"critical"},{"text":"In table 36 \"Sales Header\", Integration event publisher in or for \"OnBeforeCheckShippingAdvice\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\n/// Set to true to skip the default shipping advice check.\n [IntegrationEvent(false, false)]\n local procedure OnBeforeCheckShippingAdvice(var SalesHeader: Record \"Sales Header\"; var IsHandled: Boolean)\n begin\n end;\n```","level":"critical"},{"text":"In table 36 \"Sales Header\", Added integration event OnAfterCheckShippingAdvice in or for \"CheckShippingAdvice\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\nResult := true;\n\n OnAfterCheckShippingAdvice(Rec, Result);\n if not Result then\n Error(ErrorInfo.Create(ShippingAdviceErr, true, Rec));\n end;\n```","level":"critical"},{"text":"In table 36 \"Sales Header\", Integration event publisher in or for \"OnAfterCheckShippingAdvice\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\n/// The result of the shipping advice check.\n [IntegrationEvent(false, false)]\n local procedure OnAfterCheckShippingAdvice(var SalesHeader: Record \"Sales Header\"; var Result: Boolean)\n begin\n end;\n```","level":"critical"},{"text":"In table 36 \"Sales Header\", Added integration event OnBeforeGetContactAsCompany in or for \"CheckShippingAdvice\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\nIsHandled: Boolean;\n begin\n OnBeforeGetContactAsCompany(Contact, SearchContact, IsHandled);\n if not IsHandled then\n if Contact.\"Company No.\" <> '' then\n exit(SearchContact.Get(Contact.\"Company No.\"));\n```","level":"critical"},{"text":"In table 36 \"Sales Header\", Integration event publisher in or for \"OnBeforeGetContactAsCompany\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\n/// Set to true to skip the default search logic.\n [IntegrationEvent(false, false)]\n local procedure OnBeforeGetContactAsCompany(Contact: Record Contact; var SearchContact: Record Contact; var IsHandled: Boolean)\n begin\n end;\n```","level":"critical"},{"text":"The change is applied to exactly 15 affected .al file(s) across these layers: APAC, BE, CH, CZ, ES, FI, FR, GB, IT, NA, NL, NO, RU, SE, W1. The affected files are: App/Layers/APAC/BaseApp/Sales/Document/SalesHeader.Table.al, App/Layers/BE/BaseApp/Sales/Document/SalesHeader.Table.al, App/Layers/CH/BaseApp/Sales/Document/SalesHeader.Table.al, App/Layers/CZ/BaseApp/Sales/Document/SalesHeader.Table.al, App/Layers/ES/BaseApp/Sales/Document/SalesHeader.Table.al, App/Layers/FI/BaseApp/Sales/Document/SalesHeader.Table.al, App/Layers/FR/BaseApp/Sales/Document/SalesHeader.Table.al, App/Layers/GB/BaseApp/Sales/Document/SalesHeader.Table.al, App/Layers/IT/BaseApp/Sales/Document/SalesHeader.Table.al, App/Layers/NA/BaseApp/Sales/Document/SalesHeader.Table.al, App/Layers/NL/BaseApp/Sales/Document/SalesHeader.Table.al, App/Layers/NO/BaseApp/Sales/Document/SalesHeader.Table.al, App/Layers/RU/BaseApp/Sales/Document/SalesHeader.Table.al, App/Layers/SE/BaseApp/Sales/Document/SalesHeader.Table.al, App/Layers/W1/BaseApp/Sales/Document/SalesHeader.Table.al.","level":"critical"},{"text":"The implementation is limited to the requested extensibility change and does not modify unrelated application behavior or files.","level":"expected"}]} +{"metadata":{"area":"sales"},"repo":"microsoftInternal/NAV","instance_id":"microsoftInternal__NAV-Ext_Request_Impl-29844","base_commit":"6b83b651f8f2ff4e698ae62ed9384e09f2c0d3f0","created_at":"2026-03-19","environment_setup_version":"28.0","project_paths":["App/Layers/W1/BaseApp"],"patch":"diff --git a/App/Layers/APAC/BaseApp/Sales/Posting/SalesPost.Codeunit.al b/App/Layers/APAC/BaseApp/Sales/Posting/SalesPost.Codeunit.al\nindex 8fe2ad378d0..e09c0eb5d8d 100644\n--- a/App/Layers/APAC/BaseApp/Sales/Posting/SalesPost.Codeunit.al\n+++ b/App/Layers/APAC/BaseApp/Sales/Posting/SalesPost.Codeunit.al\n@@ -12277,6 +12277,7 @@ codeunit 80 \"Sales-Post\"\n WarehouseAvailabilityMgt: Codeunit \"Warehouse Availability Mgt.\";\n QtyReservedForCurrLine: Decimal;\n SurplusQtyToHandle: Decimal;\n+ IsHandled: Boolean;\n begin\n if not SalesHeader.Ship then\n exit;\n@@ -12310,6 +12311,11 @@ codeunit 80 \"Sales-Post\"\n if (QtyReservedForCurrLine + SurplusQtyToHandle) < SalesLine.\"Qty. to Ship (Base)\" then\n exit;\n \n+ IsHandled := false;\n+ OnSyncSurPlusItemTrackingOnBeforeModifyQtyToHandleInvoice(SalesLine, SalesHeader, IsHandled, ReservEntry);\n+ if IsHandled then\n+ exit;\n+\n ReservEntry.ModifyAll(\"Qty. to Handle (Base)\", 0);\n ReservEntry.ModifyAll(\"Qty. to Invoice (Base)\", 0);\n end;\n@@ -14291,4 +14297,9 @@ codeunit 80 \"Sales-Post\"\n local procedure OnBeforeArchiveRelatedJob(SalesHeader: Record \"Sales Header\"; var IsHandled: Boolean)\n begin\n end;\n+\n+ [IntegrationEvent(false, false)]\n+ local procedure OnSyncSurPlusItemTrackingOnBeforeModifyQtyToHandleInvoice(var SalesLine: Record \"Sales Line\"; var SalesHeader: Record \"Sales Header\"; var IsHandled: Boolean; var ReservationEntry: Record \"Reservation Entry\")\n+ begin\n+ end;\n }\n\\ No newline at end of file\ndiff --git a/App/Layers/BE/BaseApp/Sales/Posting/SalesPost.Codeunit.al b/App/Layers/BE/BaseApp/Sales/Posting/SalesPost.Codeunit.al\nindex b86c5048ae3..9dd15667794 100644\n--- a/App/Layers/BE/BaseApp/Sales/Posting/SalesPost.Codeunit.al\n+++ b/App/Layers/BE/BaseApp/Sales/Posting/SalesPost.Codeunit.al\n@@ -11961,6 +11961,7 @@ codeunit 80 \"Sales-Post\"\n WarehouseAvailabilityMgt: Codeunit \"Warehouse Availability Mgt.\";\n QtyReservedForCurrLine: Decimal;\n SurplusQtyToHandle: Decimal;\n+ IsHandled: Boolean;\n begin\n if not SalesHeader.Ship then\n exit;\n@@ -11994,6 +11995,11 @@ codeunit 80 \"Sales-Post\"\n if (QtyReservedForCurrLine + SurplusQtyToHandle) < SalesLine.\"Qty. to Ship (Base)\" then\n exit;\n \n+ IsHandled := false;\n+ OnSyncSurPlusItemTrackingOnBeforeModifyQtyToHandleInvoice(SalesLine, SalesHeader, IsHandled, ReservEntry);\n+ if IsHandled then\n+ exit;\n+\n ReservEntry.ModifyAll(\"Qty. to Handle (Base)\", 0);\n ReservEntry.ModifyAll(\"Qty. to Invoice (Base)\", 0);\n end;\n@@ -13975,4 +13981,9 @@ codeunit 80 \"Sales-Post\"\n local procedure OnBeforeArchiveRelatedJob(SalesHeader: Record \"Sales Header\"; var IsHandled: Boolean)\n begin\n end;\n+\n+ [IntegrationEvent(false, false)]\n+ local procedure OnSyncSurPlusItemTrackingOnBeforeModifyQtyToHandleInvoice(var SalesLine: Record \"Sales Line\"; var SalesHeader: Record \"Sales Header\"; var IsHandled: Boolean; var ReservationEntry: Record \"Reservation Entry\")\n+ begin\n+ end;\n }\n\\ No newline at end of file\ndiff --git a/App/Layers/CH/BaseApp/Sales/Posting/SalesPost.Codeunit.al b/App/Layers/CH/BaseApp/Sales/Posting/SalesPost.Codeunit.al\nindex a2c5d629ea2..618d0b22c6b 100644\n--- a/App/Layers/CH/BaseApp/Sales/Posting/SalesPost.Codeunit.al\n+++ b/App/Layers/CH/BaseApp/Sales/Posting/SalesPost.Codeunit.al\n@@ -12029,6 +12029,7 @@ codeunit 80 \"Sales-Post\"\n WarehouseAvailabilityMgt: Codeunit \"Warehouse Availability Mgt.\";\n QtyReservedForCurrLine: Decimal;\n SurplusQtyToHandle: Decimal;\n+ IsHandled: Boolean;\n begin\n if not SalesHeader.Ship then\n exit;\n@@ -12062,6 +12063,11 @@ codeunit 80 \"Sales-Post\"\n if (QtyReservedForCurrLine + SurplusQtyToHandle) < SalesLine.\"Qty. to Ship (Base)\" then\n exit;\n \n+ IsHandled := false;\n+ OnSyncSurPlusItemTrackingOnBeforeModifyQtyToHandleInvoice(SalesLine, SalesHeader, IsHandled, ReservEntry);\n+ if IsHandled then\n+ exit;\n+\n ReservEntry.ModifyAll(\"Qty. to Handle (Base)\", 0);\n ReservEntry.ModifyAll(\"Qty. to Invoice (Base)\", 0);\n end;\n@@ -14048,4 +14054,9 @@ codeunit 80 \"Sales-Post\"\n local procedure OnBeforeArchiveRelatedJob(SalesHeader: Record \"Sales Header\"; var IsHandled: Boolean)\n begin\n end;\n+\n+ [IntegrationEvent(false, false)]\n+ local procedure OnSyncSurPlusItemTrackingOnBeforeModifyQtyToHandleInvoice(var SalesLine: Record \"Sales Line\"; var SalesHeader: Record \"Sales Header\"; var IsHandled: Boolean; var ReservationEntry: Record \"Reservation Entry\")\n+ begin\n+ end;\n }\n\\ No newline at end of file\ndiff --git a/App/Layers/ES/BaseApp/Sales/Posting/SalesPost.Codeunit.al b/App/Layers/ES/BaseApp/Sales/Posting/SalesPost.Codeunit.al\nindex 10420ed78ec..d9d2505ea39 100644\n--- a/App/Layers/ES/BaseApp/Sales/Posting/SalesPost.Codeunit.al\n+++ b/App/Layers/ES/BaseApp/Sales/Posting/SalesPost.Codeunit.al\n@@ -12085,6 +12085,7 @@ codeunit 80 \"Sales-Post\"\n WarehouseAvailabilityMgt: Codeunit \"Warehouse Availability Mgt.\";\n QtyReservedForCurrLine: Decimal;\n SurplusQtyToHandle: Decimal;\n+ IsHandled: Boolean;\n begin\n if not SalesHeader.Ship then\n exit;\n@@ -12118,6 +12119,11 @@ codeunit 80 \"Sales-Post\"\n if (QtyReservedForCurrLine + SurplusQtyToHandle) < SalesLine.\"Qty. to Ship (Base)\" then\n exit;\n \n+ IsHandled := false;\n+ OnSyncSurPlusItemTrackingOnBeforeModifyQtyToHandleInvoice(SalesLine, SalesHeader, IsHandled, ReservEntry);\n+ if IsHandled then\n+ exit;\n+\n ReservEntry.ModifyAll(\"Qty. to Handle (Base)\", 0);\n ReservEntry.ModifyAll(\"Qty. to Invoice (Base)\", 0);\n end;\n@@ -14104,4 +14110,9 @@ codeunit 80 \"Sales-Post\"\n local procedure OnBeforeArchiveRelatedJob(SalesHeader: Record \"Sales Header\"; var IsHandled: Boolean)\n begin\n end;\n+\n+ [IntegrationEvent(false, false)]\n+ local procedure OnSyncSurPlusItemTrackingOnBeforeModifyQtyToHandleInvoice(var SalesLine: Record \"Sales Line\"; var SalesHeader: Record \"Sales Header\"; var IsHandled: Boolean; var ReservationEntry: Record \"Reservation Entry\")\n+ begin\n+ end;\n }\n\\ No newline at end of file\ndiff --git a/App/Layers/FI/BaseApp/Sales/Posting/SalesPost.Codeunit.al b/App/Layers/FI/BaseApp/Sales/Posting/SalesPost.Codeunit.al\nindex ac69dcedc51..d165cb4a215 100644\n--- a/App/Layers/FI/BaseApp/Sales/Posting/SalesPost.Codeunit.al\n+++ b/App/Layers/FI/BaseApp/Sales/Posting/SalesPost.Codeunit.al\n@@ -11930,6 +11930,7 @@ codeunit 80 \"Sales-Post\"\n WarehouseAvailabilityMgt: Codeunit \"Warehouse Availability Mgt.\";\n QtyReservedForCurrLine: Decimal;\n SurplusQtyToHandle: Decimal;\n+ IsHandled: Boolean;\n begin\n if not SalesHeader.Ship then\n exit;\n@@ -11963,6 +11964,11 @@ codeunit 80 \"Sales-Post\"\n if (QtyReservedForCurrLine + SurplusQtyToHandle) < SalesLine.\"Qty. to Ship (Base)\" then\n exit;\n \n+ IsHandled := false;\n+ OnSyncSurPlusItemTrackingOnBeforeModifyQtyToHandleInvoice(SalesLine, SalesHeader, IsHandled, ReservEntry);\n+ if IsHandled then\n+ exit;\n+\n ReservEntry.ModifyAll(\"Qty. to Handle (Base)\", 0);\n ReservEntry.ModifyAll(\"Qty. to Invoice (Base)\", 0);\n end;\n@@ -13944,4 +13950,9 @@ codeunit 80 \"Sales-Post\"\n local procedure OnBeforeArchiveRelatedJob(SalesHeader: Record \"Sales Header\"; var IsHandled: Boolean)\n begin\n end;\n+\n+ [IntegrationEvent(false, false)]\n+ local procedure OnSyncSurPlusItemTrackingOnBeforeModifyQtyToHandleInvoice(var SalesLine: Record \"Sales Line\"; var SalesHeader: Record \"Sales Header\"; var IsHandled: Boolean; var ReservationEntry: Record \"Reservation Entry\")\n+ begin\n+ end;\n }\n\\ No newline at end of file\ndiff --git a/App/Layers/FR/BaseApp/Sales/Posting/SalesPost.Codeunit.al b/App/Layers/FR/BaseApp/Sales/Posting/SalesPost.Codeunit.al\nindex 0bac17b2d84..7a37616fa93 100644\n--- a/App/Layers/FR/BaseApp/Sales/Posting/SalesPost.Codeunit.al\n+++ b/App/Layers/FR/BaseApp/Sales/Posting/SalesPost.Codeunit.al\n@@ -11954,6 +11954,7 @@ codeunit 80 \"Sales-Post\"\n WarehouseAvailabilityMgt: Codeunit \"Warehouse Availability Mgt.\";\n QtyReservedForCurrLine: Decimal;\n SurplusQtyToHandle: Decimal;\n+ IsHandled: Boolean;\n begin\n if not SalesHeader.Ship then\n exit;\n@@ -11987,6 +11988,11 @@ codeunit 80 \"Sales-Post\"\n if (QtyReservedForCurrLine + SurplusQtyToHandle) < SalesLine.\"Qty. to Ship (Base)\" then\n exit;\n \n+ IsHandled := false;\n+ OnSyncSurPlusItemTrackingOnBeforeModifyQtyToHandleInvoice(SalesLine, SalesHeader, IsHandled, ReservEntry);\n+ if IsHandled then\n+ exit;\n+\n ReservEntry.ModifyAll(\"Qty. to Handle (Base)\", 0);\n ReservEntry.ModifyAll(\"Qty. to Invoice (Base)\", 0);\n end;\n@@ -13968,4 +13974,9 @@ codeunit 80 \"Sales-Post\"\n local procedure OnBeforeArchiveRelatedJob(SalesHeader: Record \"Sales Header\"; var IsHandled: Boolean)\n begin\n end;\n+\n+ [IntegrationEvent(false, false)]\n+ local procedure OnSyncSurPlusItemTrackingOnBeforeModifyQtyToHandleInvoice(var SalesLine: Record \"Sales Line\"; var SalesHeader: Record \"Sales Header\"; var IsHandled: Boolean; var ReservationEntry: Record \"Reservation Entry\")\n+ begin\n+ end;\n }\n\\ No newline at end of file\ndiff --git a/App/Layers/GB/BaseApp/Sales/Posting/SalesPost.Codeunit.al b/App/Layers/GB/BaseApp/Sales/Posting/SalesPost.Codeunit.al\nindex f04478f6921..ffb3dabd649 100644\n--- a/App/Layers/GB/BaseApp/Sales/Posting/SalesPost.Codeunit.al\n+++ b/App/Layers/GB/BaseApp/Sales/Posting/SalesPost.Codeunit.al\n@@ -11997,6 +11997,7 @@ codeunit 80 \"Sales-Post\"\n WarehouseAvailabilityMgt: Codeunit \"Warehouse Availability Mgt.\";\n QtyReservedForCurrLine: Decimal;\n SurplusQtyToHandle: Decimal;\n+ IsHandled: Boolean;\n begin\n if not SalesHeader.Ship then\n exit;\n@@ -12030,6 +12031,11 @@ codeunit 80 \"Sales-Post\"\n if (QtyReservedForCurrLine + SurplusQtyToHandle) < SalesLine.\"Qty. to Ship (Base)\" then\n exit;\n \n+ IsHandled := false;\n+ OnSyncSurPlusItemTrackingOnBeforeModifyQtyToHandleInvoice(SalesLine, SalesHeader, IsHandled, ReservEntry);\n+ if IsHandled then\n+ exit;\n+\n ReservEntry.ModifyAll(\"Qty. to Handle (Base)\", 0);\n ReservEntry.ModifyAll(\"Qty. to Invoice (Base)\", 0);\n end;\n@@ -14016,4 +14022,9 @@ codeunit 80 \"Sales-Post\"\n local procedure OnBeforeArchiveRelatedJob(SalesHeader: Record \"Sales Header\"; var IsHandled: Boolean)\n begin\n end;\n+\n+ [IntegrationEvent(false, false)]\n+ local procedure OnSyncSurPlusItemTrackingOnBeforeModifyQtyToHandleInvoice(var SalesLine: Record \"Sales Line\"; var SalesHeader: Record \"Sales Header\"; var IsHandled: Boolean; var ReservationEntry: Record \"Reservation Entry\")\n+ begin\n+ end;\n }\n\\ No newline at end of file\ndiff --git a/App/Layers/IT/BaseApp/Sales/Posting/SalesPost.Codeunit.al b/App/Layers/IT/BaseApp/Sales/Posting/SalesPost.Codeunit.al\nindex 85090529ee1..a7ed16ed904 100644\n--- a/App/Layers/IT/BaseApp/Sales/Posting/SalesPost.Codeunit.al\n+++ b/App/Layers/IT/BaseApp/Sales/Posting/SalesPost.Codeunit.al\n@@ -12127,6 +12127,7 @@ codeunit 80 \"Sales-Post\"\n WarehouseAvailabilityMgt: Codeunit \"Warehouse Availability Mgt.\";\n QtyReservedForCurrLine: Decimal;\n SurplusQtyToHandle: Decimal;\n+ IsHandled: Boolean;\n begin\n if not SalesHeader.Ship then\n exit;\n@@ -12160,6 +12161,11 @@ codeunit 80 \"Sales-Post\"\n if (QtyReservedForCurrLine + SurplusQtyToHandle) < SalesLine.\"Qty. to Ship (Base)\" then\n exit;\n \n+ IsHandled := false;\n+ OnSyncSurPlusItemTrackingOnBeforeModifyQtyToHandleInvoice(SalesLine, SalesHeader, IsHandled, ReservEntry);\n+ if IsHandled then\n+ exit;\n+\n ReservEntry.ModifyAll(\"Qty. to Handle (Base)\", 0);\n ReservEntry.ModifyAll(\"Qty. to Invoice (Base)\", 0);\n end;\n@@ -14156,4 +14162,9 @@ codeunit 80 \"Sales-Post\"\n local procedure OnBeforeArchiveRelatedJob(SalesHeader: Record \"Sales Header\"; var IsHandled: Boolean)\n begin\n end;\n+\n+ [IntegrationEvent(false, false)]\n+ local procedure OnSyncSurPlusItemTrackingOnBeforeModifyQtyToHandleInvoice(var SalesLine: Record \"Sales Line\"; var SalesHeader: Record \"Sales Header\"; var IsHandled: Boolean; var ReservationEntry: Record \"Reservation Entry\")\n+ begin\n+ end;\n }\n\\ No newline at end of file\ndiff --git a/App/Layers/NA/BaseApp/Sales/Posting/SalesPost.Codeunit.al b/App/Layers/NA/BaseApp/Sales/Posting/SalesPost.Codeunit.al\nindex a36de2c7b7d..5ec62a6534d 100644\n--- a/App/Layers/NA/BaseApp/Sales/Posting/SalesPost.Codeunit.al\n+++ b/App/Layers/NA/BaseApp/Sales/Posting/SalesPost.Codeunit.al\n@@ -12450,6 +12450,7 @@ codeunit 80 \"Sales-Post\"\n WarehouseAvailabilityMgt: Codeunit \"Warehouse Availability Mgt.\";\n QtyReservedForCurrLine: Decimal;\n SurplusQtyToHandle: Decimal;\n+ IsHandled: Boolean;\n begin\n if not SalesHeader.Ship then\n exit;\n@@ -12483,6 +12484,11 @@ codeunit 80 \"Sales-Post\"\n if (QtyReservedForCurrLine + SurplusQtyToHandle) < SalesLine.\"Qty. to Ship (Base)\" then\n exit;\n \n+ IsHandled := false;\n+ OnSyncSurPlusItemTrackingOnBeforeModifyQtyToHandleInvoice(SalesLine, SalesHeader, IsHandled, ReservEntry);\n+ if IsHandled then\n+ exit;\n+\n ReservEntry.ModifyAll(\"Qty. to Handle (Base)\", 0);\n ReservEntry.ModifyAll(\"Qty. to Invoice (Base)\", 0);\n end;\n@@ -14499,4 +14505,9 @@ codeunit 80 \"Sales-Post\"\n local procedure OnBeforeArchiveRelatedJob(SalesHeader: Record \"Sales Header\"; var IsHandled: Boolean)\n begin\n end;\n+\n+ [IntegrationEvent(false, false)]\n+ local procedure OnSyncSurPlusItemTrackingOnBeforeModifyQtyToHandleInvoice(var SalesLine: Record \"Sales Line\"; var SalesHeader: Record \"Sales Header\"; var IsHandled: Boolean; var ReservationEntry: Record \"Reservation Entry\")\n+ begin\n+ end;\n }\n\\ No newline at end of file\ndiff --git a/App/Layers/NO/BaseApp/Sales/Posting/SalesPost.Codeunit.al b/App/Layers/NO/BaseApp/Sales/Posting/SalesPost.Codeunit.al\nindex c2d8412f058..2e17cbd2653 100644\n--- a/App/Layers/NO/BaseApp/Sales/Posting/SalesPost.Codeunit.al\n+++ b/App/Layers/NO/BaseApp/Sales/Posting/SalesPost.Codeunit.al\n@@ -11925,6 +11925,7 @@ codeunit 80 \"Sales-Post\"\n WarehouseAvailabilityMgt: Codeunit \"Warehouse Availability Mgt.\";\n QtyReservedForCurrLine: Decimal;\n SurplusQtyToHandle: Decimal;\n+ IsHandled: Boolean;\n begin\n if not SalesHeader.Ship then\n exit;\n@@ -11958,6 +11959,11 @@ codeunit 80 \"Sales-Post\"\n if (QtyReservedForCurrLine + SurplusQtyToHandle) < SalesLine.\"Qty. to Ship (Base)\" then\n exit;\n \n+ IsHandled := false;\n+ OnSyncSurPlusItemTrackingOnBeforeModifyQtyToHandleInvoice(SalesLine, SalesHeader, IsHandled, ReservEntry);\n+ if IsHandled then\n+ exit;\n+\n ReservEntry.ModifyAll(\"Qty. to Handle (Base)\", 0);\n ReservEntry.ModifyAll(\"Qty. to Invoice (Base)\", 0);\n end;\n@@ -13939,4 +13945,9 @@ codeunit 80 \"Sales-Post\"\n local procedure OnBeforeArchiveRelatedJob(SalesHeader: Record \"Sales Header\"; var IsHandled: Boolean)\n begin\n end;\n+\n+ [IntegrationEvent(false, false)]\n+ local procedure OnSyncSurPlusItemTrackingOnBeforeModifyQtyToHandleInvoice(var SalesLine: Record \"Sales Line\"; var SalesHeader: Record \"Sales Header\"; var IsHandled: Boolean; var ReservationEntry: Record \"Reservation Entry\")\n+ begin\n+ end;\n }\n\\ No newline at end of file\ndiff --git a/App/Layers/RU/BaseApp/Sales/Posting/SalesPost.Codeunit.al b/App/Layers/RU/BaseApp/Sales/Posting/SalesPost.Codeunit.al\nindex b4a0e3ea891..46934f29715 100644\n--- a/App/Layers/RU/BaseApp/Sales/Posting/SalesPost.Codeunit.al\n+++ b/App/Layers/RU/BaseApp/Sales/Posting/SalesPost.Codeunit.al\n@@ -12654,6 +12654,7 @@ codeunit 80 \"Sales-Post\"\n WarehouseAvailabilityMgt: Codeunit \"Warehouse Availability Mgt.\";\n QtyReservedForCurrLine: Decimal;\n SurplusQtyToHandle: Decimal;\n+ IsHandled: Boolean;\n begin\n if not SalesHeader.Ship then\n exit;\n@@ -12687,6 +12688,11 @@ codeunit 80 \"Sales-Post\"\n if (QtyReservedForCurrLine + SurplusQtyToHandle) < SalesLine.\"Qty. to Ship (Base)\" then\n exit;\n \n+ IsHandled := false;\n+ OnSyncSurPlusItemTrackingOnBeforeModifyQtyToHandleInvoice(SalesLine, SalesHeader, IsHandled, ReservEntry);\n+ if IsHandled then\n+ exit;\n+\n ReservEntry.ModifyAll(\"Qty. to Handle (Base)\", 0);\n ReservEntry.ModifyAll(\"Qty. to Invoice (Base)\", 0);\n end;\n@@ -14673,4 +14679,9 @@ codeunit 80 \"Sales-Post\"\n local procedure OnBeforeArchiveRelatedJob(SalesHeader: Record \"Sales Header\"; var IsHandled: Boolean)\n begin\n end;\n+\n+ [IntegrationEvent(false, false)]\n+ local procedure OnSyncSurPlusItemTrackingOnBeforeModifyQtyToHandleInvoice(var SalesLine: Record \"Sales Line\"; var SalesHeader: Record \"Sales Header\"; var IsHandled: Boolean; var ReservationEntry: Record \"Reservation Entry\")\n+ begin\n+ end;\n }\n\\ No newline at end of file\ndiff --git a/App/Layers/W1/BaseApp/Sales/Posting/SalesPost.Codeunit.al b/App/Layers/W1/BaseApp/Sales/Posting/SalesPost.Codeunit.al\nindex 8ce002195f8..6bad8c75ab0 100644\n--- a/App/Layers/W1/BaseApp/Sales/Posting/SalesPost.Codeunit.al\n+++ b/App/Layers/W1/BaseApp/Sales/Posting/SalesPost.Codeunit.al\n@@ -11920,6 +11920,7 @@ codeunit 80 \"Sales-Post\"\n WarehouseAvailabilityMgt: Codeunit \"Warehouse Availability Mgt.\";\n QtyReservedForCurrLine: Decimal;\n SurplusQtyToHandle: Decimal;\n+ IsHandled: Boolean;\n begin\n if not SalesHeader.Ship then\n exit;\n@@ -11953,6 +11954,11 @@ codeunit 80 \"Sales-Post\"\n if (QtyReservedForCurrLine + SurplusQtyToHandle) < SalesLine.\"Qty. to Ship (Base)\" then\n exit;\n \n+ IsHandled := false;\n+ OnSyncSurPlusItemTrackingOnBeforeModifyQtyToHandleInvoice(SalesLine, SalesHeader, IsHandled, ReservEntry);\n+ if IsHandled then\n+ exit;\n+\n ReservEntry.ModifyAll(\"Qty. to Handle (Base)\", 0);\n ReservEntry.ModifyAll(\"Qty. to Invoice (Base)\", 0);\n end;\n@@ -13934,4 +13940,9 @@ codeunit 80 \"Sales-Post\"\n local procedure OnBeforeArchiveRelatedJob(SalesHeader: Record \"Sales Header\"; var IsHandled: Boolean)\n begin\n end;\n+\n+ [IntegrationEvent(false, false)]\n+ local procedure OnSyncSurPlusItemTrackingOnBeforeModifyQtyToHandleInvoice(var SalesLine: Record \"Sales Line\"; var SalesHeader: Record \"Sales Header\"; var IsHandled: Boolean; var ReservationEntry: Record \"Reservation Entry\")\n+ begin\n+ end;\n }\n\\ No newline at end of file\n","expected":[{"text":"In codeunit 80 \"Sales-Post\", Added integration event OnBeforeModifyQtyToHandleInvoiceOnAfterSyncSurPlusItemTracking in or for \"ModifyQtyToHandleInvoice\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\nOnBeforeModifyQtyToHandleInvoiceOnAfterSyncSurPlusItemTracking(SalesLine, SalesHeader, IsHandled, ReservEntry);\n if IsHandled then\n exit;\n```","level":"critical"},{"text":"In codeunit 80 \"Sales-Post\", Integration event publisher in or for \"OnBeforeModifyQtyToHandleInvoiceOnAfterSyncSurPlusItemTracking\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\n[IntegrationEvent(false, false)]\n local procedure OnBeforeModifyQtyToHandleInvoiceOnAfterSyncSurPlusItemTracking(SalesLine: Record \"Sales Line\"; SalesHeader: Record \"Sales Header\"; var IsHandled: Boolean; var ReservEntry: Record \"Reservation Entry\")\n begin\n end;\n```","level":"critical"},{"text":"The change is applied to exactly 12 affected .al file(s) across these layers: APAC, BE, CH, ES, FI, FR, GB, IT, NA, NO, RU, W1. The affected files are: App/Layers/APAC/BaseApp/Sales/Posting/SalesPost.Codeunit.al, App/Layers/BE/BaseApp/Sales/Posting/SalesPost.Codeunit.al, App/Layers/CH/BaseApp/Sales/Posting/SalesPost.Codeunit.al, App/Layers/ES/BaseApp/Sales/Posting/SalesPost.Codeunit.al, App/Layers/FI/BaseApp/Sales/Posting/SalesPost.Codeunit.al, App/Layers/FR/BaseApp/Sales/Posting/SalesPost.Codeunit.al, App/Layers/GB/BaseApp/Sales/Posting/SalesPost.Codeunit.al, App/Layers/IT/BaseApp/Sales/Posting/SalesPost.Codeunit.al, App/Layers/NA/BaseApp/Sales/Posting/SalesPost.Codeunit.al, App/Layers/NO/BaseApp/Sales/Posting/SalesPost.Codeunit.al, App/Layers/RU/BaseApp/Sales/Posting/SalesPost.Codeunit.al, App/Layers/W1/BaseApp/Sales/Posting/SalesPost.Codeunit.al.","level":"critical"},{"text":"The implementation is limited to the requested extensibility change and does not modify unrelated application behavior or files.","level":"expected"}]} +{"metadata":{"area":"inventory"},"repo":"microsoftInternal/NAV","instance_id":"microsoftInternal__NAV-Ext_Request_Impl-29866","base_commit":"b390db3ceb21e288e8a8774b233b7b1d2d398edf","created_at":"2026-03-24","environment_setup_version":"28.0","project_paths":["App/Layers/W1/BaseApp"],"patch":"diff --git a/App/Layers/W1/BaseApp/Inventory/Posting/ItemJnlPostBatch.Codeunit.al b/App/Layers/W1/BaseApp/Inventory/Posting/ItemJnlPostBatch.Codeunit.al\nindex ed336be766f..787bf1ccad0 100644\n--- a/App/Layers/W1/BaseApp/Inventory/Posting/ItemJnlPostBatch.Codeunit.al\n+++ b/App/Layers/W1/BaseApp/Inventory/Posting/ItemJnlPostBatch.Codeunit.al\n@@ -301,8 +301,11 @@ codeunit 23 \"Item Jnl.-Post Batch\"\n ItemJnlLineLoop.FindSet();\n repeat\n ItemJnlLine := ItemJnlLineLoop;\n- if not ItemJnlLine.EmptyLine() and (ItemJnlBatch.\"No. Series\" <> '') and (ItemJnlLine.\"Document No.\" <> LastDocNo2) then\n- ItemJnlLine.TestField(\"Document No.\", NoSeriesBatch.GetNextNo(ItemJnlBatch.\"No. Series\", ItemJnlLine.\"Posting Date\"));\n+ IsHandled := false;\n+ OnBeforeValidateDocumentNo(ItemJnlLine, ItemJnlBatch, LastDocNo2, IsHandled);\n+ if not IsHandled then\n+ if not ItemJnlLine.EmptyLine() and (ItemJnlBatch.\"No. Series\" <> '') and (ItemJnlLine.\"Document No.\" <> LastDocNo2) then\n+ ItemJnlLine.TestField(\"Document No.\", NoSeriesBatch.GetNextNo(ItemJnlBatch.\"No. Series\", ItemJnlLine.\"Posting Date\"));\n if not ItemJnlLine.EmptyLine() then\n LastDocNo2 := ItemJnlLine.\"Document No.\";\n \n@@ -1084,6 +1087,11 @@ codeunit 23 \"Item Jnl.-Post Batch\"\n begin\n end;\n \n+ [IntegrationEvent(false, false)]\n+ local procedure OnBeforeValidateDocumentNo(var ItemJournalLine: Record \"Item Journal Line\"; var ItemJournalBatch: Record \"Item Journal Batch\"; LastDocNo2: Code[20]; var IsHandled: Boolean)\n+ begin\n+ end;\n+\n [IntegrationEvent(false, false)]\n local procedure OnAfterPostLines(var ItemJournalLine: Record \"Item Journal Line\"; var ItemRegNo: Integer; var WhseRegNo: Integer)\n begin\n","expected":[{"text":"In codeunit 23 \"Item Jnl.-Post Batch\", Added integration event OnBeforeValidateDocumentNo in or for \"PostLines\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\nItemJnlLine := ItemJnlLineLoop;\n IsHandled := false;\n OnBeforeValidateDocumentNo(ItemJnlLine, ItemJnlBatch, LastDocNo2, IsHandled);\n if not IsHandled then\n if not ItemJnlLine.EmptyLine() and (ItemJnlBatch.\"No. Series\" <> '') and (ItemJnlLine.\"Document No.\" <> LastDocNo2) then\n ItemJnlLine.TestField(\"Document No.\", NoSeriesBatch.GetNextNo(ItemJnlBatch.\"No. Series\", ItemJnlLine.\"Posting Date\"));\n```","level":"critical"},{"text":"In codeunit 23 \"Item Jnl.-Post Batch\", Integration event publisher in or for \"OnBeforeValidateDocumentNo\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\n[IntegrationEvent(false, false)]\n local procedure OnBeforeValidateDocumentNo(var ItemJournalLine: Record \"Item Journal Line\"; var ItemJournalBatch: Record \"Item Journal Batch\"; LastDocNo2: Code[20]; var IsHandled: Boolean)\n begin\n end;\n```","level":"critical"},{"text":"In codeunit 23 \"Item Jnl.-Post Batch\", Added integration event OnBeforePostLines in or for \"trigger OnRun\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\nPhysInvtCount := false;\n // Post lines\n OnCodeOnBeforePostLines(ItemJnlLine, NoOfRecords);\n LineCount := 0;\n OldEntryType := ItemJnlLine.\"Entry Type\";\n PostLines(ItemJnlLine, PhysInvtCountMgt);\n```","level":"critical"},{"text":"In codeunit 23 \"Item Jnl.-Post Batch\", Integration event publisher in or for \"OnBeforePostLines\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\n[IntegrationEvent(false, false)]\n local procedure OnBeforePostLines(var ItemJournalLine: Record \"Item Journal Line\"; var ItemRegNo: Integer; var WhseRegNo: Integer)\n begin\n end;\n```","level":"critical"},{"text":"In codeunit 23 \"Item Jnl.-Post Batch\", Added integration event OnAfterPostLines in or for \"PostLines\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\nuntil ItemJnlLineLoop.Next() = 0;\n\n OnAfterPostLines(ItemJnlLine, ItemRegNo, WhseRegNo);\n end;\n\n local procedure HandleRecurringLine(var ItemJnlLine: Record \"Item Journal Line\")\n```","level":"critical"},{"text":"In codeunit 23 \"Item Jnl.-Post Batch\", Integration event publisher in or for \"OnAfterPostLines\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\n[IntegrationEvent(false, false)]\n local procedure OnAfterPostLines(var ItemJournalLine: Record \"Item Journal Line\"; var ItemRegNo: Integer; var WhseRegNo: Integer)\n begin\n end;\n```","level":"critical"},{"text":"The change is applied to exactly 1 affected .al file(s) across these layers: W1. The affected files are: App/Layers/W1/BaseApp/Inventory/Posting/ItemJnlPostBatch.Codeunit.al.","level":"critical"},{"text":"The implementation is limited to the requested extensibility change and does not modify unrelated application behavior or files.","level":"expected"}]} +{"metadata":{"area":"purchases"},"repo":"microsoftInternal/NAV","instance_id":"microsoftInternal__NAV-Ext_Request_Impl-29861","base_commit":"934c41a9378782af5b0f55d534a4820bab07c698","created_at":"2026-03-20","environment_setup_version":"28.0","project_paths":["App/Layers/W1/BaseApp"],"patch":"diff --git a/App/Layers/APAC/BaseApp/Purchases/Posting/PurchPostInvoice.Codeunit.al b/App/Layers/APAC/BaseApp/Purchases/Posting/PurchPostInvoice.Codeunit.al\nindex ab9e3e28761..2c7e9eaa3f2 100644\n--- a/App/Layers/APAC/BaseApp/Purchases/Posting/PurchPostInvoice.Codeunit.al\n+++ b/App/Layers/APAC/BaseApp/Purchases/Posting/PurchPostInvoice.Codeunit.al\n@@ -1591,6 +1591,8 @@ codeunit 816 \"Purch. Post Invoice\" implements \"Invoice Posting\"\n CalcSplitAmount(\n GenJnlLine.\"Salvage Value\", GenJnlLine2.\"Salvage Value\", TotalGenJnlLine.\"Salvage Value\", I, SplitNo);\n \n+ OnSplitFAOnBeforeRunGenJnlPostLine(GenJnlLine, GenJnlLine2, TotalGenJnlLine, I, SplitNo);\n+\n RunGenJnlPostLine(GenJnlLine, GenJnlPostLine);\n end;\n end;\n@@ -1694,4 +1696,9 @@ codeunit 816 \"Purch. Post Invoice\" implements \"Invoice Posting\"\n until FADeprBook.Next() = 0;\n end;\n end;\n+\n+ [IntegrationEvent(false, false)]\n+ local procedure OnSplitFAOnBeforeRunGenJnlPostLine(var GenJournalLine: Record \"Gen. Journal Line\"; var GenJournalLine2: Record \"Gen. Journal Line\"; var TotalGenJournalLine: Record \"Gen. Journal Line\"; IterationCounter: Integer; SplitNo: Integer)\n+ begin\n+ end;\n }\n\\ No newline at end of file\ndiff --git a/App/Layers/BE/BaseApp/Purchases/Posting/PurchPostInvoice.Codeunit.al b/App/Layers/BE/BaseApp/Purchases/Posting/PurchPostInvoice.Codeunit.al\nindex 3cabbe4b3c9..bbc17b381a0 100644\n--- a/App/Layers/BE/BaseApp/Purchases/Posting/PurchPostInvoice.Codeunit.al\n+++ b/App/Layers/BE/BaseApp/Purchases/Posting/PurchPostInvoice.Codeunit.al\n@@ -1255,6 +1255,8 @@ codeunit 816 \"Purch. Post Invoice\" implements \"Invoice Posting\"\n CalcSplitAmount(\n GenJnlLine.\"Salvage Value\", GenJnlLine2.\"Salvage Value\", TotalGenJnlLine.\"Salvage Value\", I, SplitNo);\n \n+ OnSplitFAOnBeforeRunGenJnlPostLine(GenJnlLine, GenJnlLine2, TotalGenJnlLine, I, SplitNo);\n+\n RunGenJnlPostLine(GenJnlLine, GenJnlPostLine);\n end;\n end;\n@@ -1358,4 +1360,9 @@ codeunit 816 \"Purch. Post Invoice\" implements \"Invoice Posting\"\n until FADeprBook.Next() = 0;\n end;\n end;\n+\n+ [IntegrationEvent(false, false)]\n+ local procedure OnSplitFAOnBeforeRunGenJnlPostLine(var GenJournalLine: Record \"Gen. Journal Line\"; var GenJournalLine2: Record \"Gen. Journal Line\"; var TotalGenJournalLine: Record \"Gen. Journal Line\"; IterationCounter: Integer; SplitNo: Integer)\n+ begin\n+ end;\n }\n\\ No newline at end of file\ndiff --git a/App/Layers/CH/BaseApp/Purchases/Posting/PurchPostInvoice.Codeunit.al b/App/Layers/CH/BaseApp/Purchases/Posting/PurchPostInvoice.Codeunit.al\nindex 5040159c78e..ebd5c74145d 100644\n--- a/App/Layers/CH/BaseApp/Purchases/Posting/PurchPostInvoice.Codeunit.al\n+++ b/App/Layers/CH/BaseApp/Purchases/Posting/PurchPostInvoice.Codeunit.al\n@@ -1237,6 +1237,8 @@ codeunit 816 \"Purch. Post Invoice\" implements \"Invoice Posting\"\n CalcSplitAmount(\n GenJnlLine.\"Salvage Value\", GenJnlLine2.\"Salvage Value\", TotalGenJnlLine.\"Salvage Value\", I, SplitNo);\n \n+ OnSplitFAOnBeforeRunGenJnlPostLine(GenJnlLine, GenJnlLine2, TotalGenJnlLine, I, SplitNo);\n+\n RunGenJnlPostLine(GenJnlLine, GenJnlPostLine);\n end;\n end;\n@@ -1340,4 +1342,9 @@ codeunit 816 \"Purch. Post Invoice\" implements \"Invoice Posting\"\n until FADeprBook.Next() = 0;\n end;\n end;\n+\n+ [IntegrationEvent(false, false)]\n+ local procedure OnSplitFAOnBeforeRunGenJnlPostLine(var GenJournalLine: Record \"Gen. Journal Line\"; var GenJournalLine2: Record \"Gen. Journal Line\"; var TotalGenJournalLine: Record \"Gen. Journal Line\"; IterationCounter: Integer; SplitNo: Integer)\n+ begin\n+ end;\n }\n\\ No newline at end of file\ndiff --git a/App/Layers/ES/BaseApp/Purchases/Posting/PurchPostInvoice.Codeunit.al b/App/Layers/ES/BaseApp/Purchases/Posting/PurchPostInvoice.Codeunit.al\nindex 2ea3d0b78b2..a8b281a962e 100644\n--- a/App/Layers/ES/BaseApp/Purchases/Posting/PurchPostInvoice.Codeunit.al\n+++ b/App/Layers/ES/BaseApp/Purchases/Posting/PurchPostInvoice.Codeunit.al\n@@ -1299,6 +1299,8 @@ codeunit 816 \"Purch. Post Invoice\" implements \"Invoice Posting\"\n CalcSplitAmount(\n GenJnlLine.\"Salvage Value\", GenJnlLine2.\"Salvage Value\", TotalGenJnlLine.\"Salvage Value\", I, SplitNo);\n \n+ OnSplitFAOnBeforeRunGenJnlPostLine(GenJnlLine, GenJnlLine2, TotalGenJnlLine, I, SplitNo);\n+\n RunGenJnlPostLine(GenJnlLine, GenJnlPostLine);\n end;\n end;\n@@ -1402,4 +1404,9 @@ codeunit 816 \"Purch. Post Invoice\" implements \"Invoice Posting\"\n until FADeprBook.Next() = 0;\n end;\n end;\n+\n+ [IntegrationEvent(false, false)]\n+ local procedure OnSplitFAOnBeforeRunGenJnlPostLine(var GenJournalLine: Record \"Gen. Journal Line\"; var GenJournalLine2: Record \"Gen. Journal Line\"; var TotalGenJournalLine: Record \"Gen. Journal Line\"; IterationCounter: Integer; SplitNo: Integer)\n+ begin\n+ end;\n }\n\\ No newline at end of file\ndiff --git a/App/Layers/IT/BaseApp/Purchases/Posting/PurchPostInvoice.Codeunit.al b/App/Layers/IT/BaseApp/Purchases/Posting/PurchPostInvoice.Codeunit.al\nindex b1a568c278e..439411e98e3 100644\n--- a/App/Layers/IT/BaseApp/Purchases/Posting/PurchPostInvoice.Codeunit.al\n+++ b/App/Layers/IT/BaseApp/Purchases/Posting/PurchPostInvoice.Codeunit.al\n@@ -1290,6 +1290,8 @@ codeunit 816 \"Purch. Post Invoice\" implements \"Invoice Posting\"\n CalcSplitAmount(\n GenJnlLine.\"Salvage Value\", GenJnlLine2.\"Salvage Value\", TotalGenJnlLine.\"Salvage Value\", I, SplitNo);\n \n+ OnSplitFAOnBeforeRunGenJnlPostLine(GenJnlLine, GenJnlLine2, TotalGenJnlLine, I, SplitNo);\n+\n RunGenJnlPostLine(GenJnlLine, GenJnlPostLine);\n end;\n end;\n@@ -1403,4 +1405,9 @@ codeunit 816 \"Purch. Post Invoice\" implements \"Invoice Posting\"\n until FADeprBook.Next() = 0;\n end;\n end;\n+\n+ [IntegrationEvent(false, false)]\n+ local procedure OnSplitFAOnBeforeRunGenJnlPostLine(var GenJournalLine: Record \"Gen. Journal Line\"; var GenJournalLine2: Record \"Gen. Journal Line\"; var TotalGenJournalLine: Record \"Gen. Journal Line\"; IterationCounter: Integer; SplitNo: Integer)\n+ begin\n+ end;\n }\n\\ No newline at end of file\ndiff --git a/App/Layers/NA/BaseApp/Purchases/Posting/PurchPostInvoice.Codeunit.al b/App/Layers/NA/BaseApp/Purchases/Posting/PurchPostInvoice.Codeunit.al\nindex 07cdbe8cafd..cebbcffaa4e 100644\n--- a/App/Layers/NA/BaseApp/Purchases/Posting/PurchPostInvoice.Codeunit.al\n+++ b/App/Layers/NA/BaseApp/Purchases/Posting/PurchPostInvoice.Codeunit.al\n@@ -1221,6 +1221,8 @@ codeunit 816 \"Purch. Post Invoice\" implements \"Invoice Posting\"\n CalcSplitAmount(\n GenJnlLine.\"Salvage Value\", GenJnlLine2.\"Salvage Value\", TotalGenJnlLine.\"Salvage Value\", I, SplitNo);\n \n+ OnSplitFAOnBeforeRunGenJnlPostLine(GenJnlLine, GenJnlLine2, TotalGenJnlLine, I, SplitNo);\n+\n RunGenJnlPostLine(GenJnlLine, GenJnlPostLine);\n end;\n end;\n@@ -1353,4 +1355,9 @@ codeunit 816 \"Purch. Post Invoice\" implements \"Invoice Posting\"\n until FADeprBook.Next() = 0;\n end;\n end;\n+\n+ [IntegrationEvent(false, false)]\n+ local procedure OnSplitFAOnBeforeRunGenJnlPostLine(var GenJournalLine: Record \"Gen. Journal Line\"; var GenJournalLine2: Record \"Gen. Journal Line\"; var TotalGenJournalLine: Record \"Gen. Journal Line\"; IterationCounter: Integer; SplitNo: Integer)\n+ begin\n+ end;\n }\n\\ No newline at end of file\ndiff --git a/App/Layers/RU/BaseApp/Purchases/Posting/PurchPostInvoice.Codeunit.al b/App/Layers/RU/BaseApp/Purchases/Posting/PurchPostInvoice.Codeunit.al\nindex 97a54c8afa1..5c5aeba9c8b 100644\n--- a/App/Layers/RU/BaseApp/Purchases/Posting/PurchPostInvoice.Codeunit.al\n+++ b/App/Layers/RU/BaseApp/Purchases/Posting/PurchPostInvoice.Codeunit.al\n@@ -1303,6 +1303,8 @@ codeunit 816 \"Purch. Post Invoice\" implements \"Invoice Posting\"\n CalcSplitAmount(\n GenJnlLine.\"Salvage Value\", GenJnlLine2.\"Salvage Value\", TotalGenJnlLine.\"Salvage Value\", I, SplitNo);\n \n+ OnSplitFAOnBeforeRunGenJnlPostLine(GenJnlLine, GenJnlLine2, TotalGenJnlLine, I, SplitNo);\n+\n RunGenJnlPostLine(GenJnlLine, GenJnlPostLine);\n end;\n end;\n@@ -1406,4 +1408,9 @@ codeunit 816 \"Purch. Post Invoice\" implements \"Invoice Posting\"\n until FADeprBook.Next() = 0;\n end;\n end;\n+\n+ [IntegrationEvent(false, false)]\n+ local procedure OnSplitFAOnBeforeRunGenJnlPostLine(var GenJournalLine: Record \"Gen. Journal Line\"; var GenJournalLine2: Record \"Gen. Journal Line\"; var TotalGenJournalLine: Record \"Gen. Journal Line\"; IterationCounter: Integer; SplitNo: Integer)\n+ begin\n+ end;\n }\n\\ No newline at end of file\ndiff --git a/App/Layers/W1/BaseApp/Purchases/Posting/PurchPostInvoice.Codeunit.al b/App/Layers/W1/BaseApp/Purchases/Posting/PurchPostInvoice.Codeunit.al\nindex 45f247a6e35..fc261cd222a 100644\n--- a/App/Layers/W1/BaseApp/Purchases/Posting/PurchPostInvoice.Codeunit.al\n+++ b/App/Layers/W1/BaseApp/Purchases/Posting/PurchPostInvoice.Codeunit.al\n@@ -1232,6 +1232,8 @@ codeunit 816 \"Purch. Post Invoice\" implements \"Invoice Posting\"\n CalcSplitAmount(\n GenJnlLine.\"Salvage Value\", GenJnlLine2.\"Salvage Value\", TotalGenJnlLine.\"Salvage Value\", I, SplitNo);\n \n+ OnSplitFAOnBeforeRunGenJnlPostLine(GenJnlLine, GenJnlLine2, TotalGenJnlLine, I, SplitNo);\n+\n RunGenJnlPostLine(GenJnlLine, GenJnlPostLine);\n end;\n end;\n@@ -1335,4 +1337,9 @@ codeunit 816 \"Purch. Post Invoice\" implements \"Invoice Posting\"\n until FADeprBook.Next() = 0;\n end;\n end;\n+\n+ [IntegrationEvent(false, false)]\n+ local procedure OnSplitFAOnBeforeRunGenJnlPostLine(var GenJournalLine: Record \"Gen. Journal Line\"; var GenJournalLine2: Record \"Gen. Journal Line\"; var TotalGenJournalLine: Record \"Gen. Journal Line\"; IterationCounter: Integer; SplitNo: Integer)\n+ begin\n+ end;\n }\n\\ No newline at end of file\n","expected":[{"text":"In codeunit 816 \"Purch. Post Invoice\", Added integration event OnSplitFAOnBeforeRunGenJnlPostLine in or for \"SplitFA\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\nGenJnlLine.\"Salvage Value\", GenJnlLine2.\"Salvage Value\", TotalGenJnlLine.\"Salvage Value\", I, SplitNo);\n\n OnSplitFAOnBeforeRunGenJnlPostLine(GenJnlLine, GenJnlLine2, TotalGenJnlLine, I, SplitNo);\n\n RunGenJnlPostLine(GenJnlLine, GenJnlPostLine);\n end;\n```","level":"critical"},{"text":"In codeunit 816 \"Purch. Post Invoice\", Integration event publisher in or for \"OnSplitFAOnBeforeRunGenJnlPostLine\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\n[IntegrationEvent(false, false)]\n local procedure OnSplitFAOnBeforeRunGenJnlPostLine(var GenJournalLine: Record \"Gen. Journal Line\"; var GenJournalLine2: Record \"Gen. Journal Line\"; var TotalGenJournalLine: Record \"Gen. Journal Line\"; IterationCounter: Integer; SplitNo: Integer)\n begin\n```","level":"critical"},{"text":"The change is applied to exactly 8 affected .al file(s) across these layers: APAC, BE, CH, ES, IT, NA, RU, W1. The affected files are: App/Layers/APAC/BaseApp/Purchases/Posting/PurchPostInvoice.Codeunit.al, App/Layers/BE/BaseApp/Purchases/Posting/PurchPostInvoice.Codeunit.al, App/Layers/CH/BaseApp/Purchases/Posting/PurchPostInvoice.Codeunit.al, App/Layers/ES/BaseApp/Purchases/Posting/PurchPostInvoice.Codeunit.al, App/Layers/IT/BaseApp/Purchases/Posting/PurchPostInvoice.Codeunit.al, App/Layers/NA/BaseApp/Purchases/Posting/PurchPostInvoice.Codeunit.al, App/Layers/RU/BaseApp/Purchases/Posting/PurchPostInvoice.Codeunit.al, App/Layers/W1/BaseApp/Purchases/Posting/PurchPostInvoice.Codeunit.al.","level":"critical"},{"text":"The implementation is limited to the requested extensibility change and does not modify unrelated application behavior or files.","level":"expected"}]} +{"metadata":{"area":"manufacturing"},"repo":"microsoftInternal/NAV","instance_id":"microsoftInternal__NAV-Ext_Request_Impl-29890","base_commit":"ce3ee4e3ee1728dc5aa05fc495f0f9dbeea6a4ff","created_at":"2026-04-09","environment_setup_version":"28.0","project_paths":["App/Layers/W1/BaseApp"],"patch":"diff --git a/App/Layers/IT/BaseApp/Manufacturing/StandardCost/CalculateStandardCost.Codeunit.al b/App/Layers/IT/BaseApp/Manufacturing/StandardCost/CalculateStandardCost.Codeunit.al\nindex 9dfb6465fe0..61f8dc74604 100644\n--- a/App/Layers/IT/BaseApp/Manufacturing/StandardCost/CalculateStandardCost.Codeunit.al\n+++ b/App/Layers/IT/BaseApp/Manufacturing/StandardCost/CalculateStandardCost.Codeunit.al\n@@ -254,7 +254,7 @@ codeunit 5812 \"Calculate Standard Cost\"\n CalcAssemblyItem(ItemNo, Item, 0, CalcMfgItems)\n end else\n CalcMfgItem(ItemNo, Item, 0);\n-\n+ OnCalcItemOnAfterCalculateCosts(Item);\n if TempItem.Find('-') then\n repeat\n ItemCostMgt.UpdateStdCostShares(TempItem);\n@@ -905,6 +905,7 @@ codeunit 5812 \"Calculate Standard Cost\"\n CalcProdBOMCost(\n MfgItem, ProdBOMLine.\"No.\", RtngNo, CompItemQtyBase, false, Level, SLMat, RUMat, RUCap, RUSub, RUCapOvhd, RUMfgOvhd, SLNonInvMat, RUNonInvMat, SKU);\n end;\n+ OnCalcProdBOMCostOnBeforeNextLineIteration(ProdBOMLine, PBOMVersionCode, Level, CompItemQtyBase, CompItem, SLMat);\n until ProdBOMLine.Next() = 0;\n end;\n \n@@ -1588,6 +1589,16 @@ codeunit 5812 \"Calculate Standard Cost\"\n begin\n end;\n \n+ [IntegrationEvent(false, false)]\n+ local procedure OnCalcItemOnAfterCalculateCosts(var Item: Record Item)\n+ begin\n+ end;\n+\n+ [IntegrationEvent(false, false)]\n+ local procedure OnCalcProdBOMCostOnBeforeNextLineIteration(var ProductionBOMLine: Record \"Production BOM Line\"; PBOMVersionCode: Code[20]; Level: Integer; CompItemQtyBase: Decimal; CompItem: Record Item; SLMat: Decimal)\n+ begin\n+ end;\n+\n [EventSubscriber(ObjectType::Table, Database::\"Standard Cost Worksheet\", 'OnAfterValidateEvent', 'No.', true, true)]\n local procedure OnValidateNoByType(var Rec: Record \"Standard Cost Worksheet\")\n var\ndiff --git a/App/Layers/W1/BaseApp/Manufacturing/StandardCost/CalculateStandardCost.Codeunit.al b/App/Layers/W1/BaseApp/Manufacturing/StandardCost/CalculateStandardCost.Codeunit.al\nindex 7fabbdc13f2..df2c5561759 100644\n--- a/App/Layers/W1/BaseApp/Manufacturing/StandardCost/CalculateStandardCost.Codeunit.al\n+++ b/App/Layers/W1/BaseApp/Manufacturing/StandardCost/CalculateStandardCost.Codeunit.al\n@@ -251,7 +251,7 @@ codeunit 5812 \"Calculate Standard Cost\"\n CalcAssemblyItem(ItemNo, Item, 0, CalcMfgItems)\n end else\n CalcMfgItem(ItemNo, Item, 0);\n-\n+ OnCalcItemOnAfterCalculateCosts(Item);\n if TempItem.Find('-') then\n repeat\n ItemCostMgt.UpdateStdCostShares(TempItem);\n@@ -902,6 +902,7 @@ codeunit 5812 \"Calculate Standard Cost\"\n CalcProdBOMCost(\n MfgItem, ProdBOMLine.\"No.\", RtngNo, CompItemQtyBase, false, Level, SLMat, RUMat, RUCap, RUSub, RUCapOvhd, RUMfgOvhd, SLNonInvMat, RUNonInvMat, SKU);\n end;\n+ OnCalcProdBOMCostOnBeforeNextLineIteration(ProdBOMLine, PBOMVersionCode, Level, CompItemQtyBase, CompItem, SLMat);\n until ProdBOMLine.Next() = 0;\n end;\n \n@@ -1556,6 +1557,16 @@ codeunit 5812 \"Calculate Standard Cost\"\n begin\n end;\n \n+ [IntegrationEvent(false, false)]\n+ local procedure OnCalcItemOnAfterCalculateCosts(var Item: Record Item)\n+ begin\n+ end;\n+\n+ [IntegrationEvent(false, false)]\n+ local procedure OnCalcProdBOMCostOnBeforeNextLineIteration(var ProductionBOMLine: Record \"Production BOM Line\"; PBOMVersionCode: Code[20]; Level: Integer; CompItemQtyBase: Decimal; CompItem: Record Item; SLMat: Decimal)\n+ begin\n+ end;\n+\n [EventSubscriber(ObjectType::Table, Database::\"Standard Cost Worksheet\", 'OnAfterValidateEvent', 'No.', true, false)]\n local procedure OnValidateNoByType(var Rec: Record \"Standard Cost Worksheet\")\n var\n","expected":[{"text":"In codeunit 5812 \"Calculate Standard Cost\", Added integration event OnCalcItemOnAfterCalculateCosts in or for \"CalcItem\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\nend else\n CalcMfgItem(ItemNo, Item, 0);\n OnCalcItemOnAfterCalculateCosts(Item);\n if TempItem.Find('-') then\n repeat\n ItemCostMgt.UpdateStdCostShares(TempItem);\n```","level":"critical"},{"text":"In codeunit 5812 \"Calculate Standard Cost\", Integration event publisher in or for \"OnCalcItemOnAfterCalculateCosts\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\n[IntegrationEvent(false, false)]\n local procedure OnCalcItemOnAfterCalculateCosts(Item: Record Item)\n begin\n end;\n```","level":"critical"},{"text":"In codeunit 5812 \"Calculate Standard Cost\", Added integration event OnCalcProdBOMCostOnBeforeNextLineIteration in or for \"CalcProdBOMCost\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\nMfgItem, ProdBOMLine.\"No.\", RtngNo, CompItemQtyBase, false, Level, SLMat, RUMat, RUCap, RUSub, RUCapOvhd, RUMfgOvhd, SLNonInvMat, RUNonInvMat, SKU);\n end;\n OnCalcProdBOMCostOnBeforeNextLineIteration(ProdBOMLine, PBOMVersionCode, Level, CompItemQtyBase, CompItem, SLMat);\n until ProdBOMLine.Next() = 0;\n end;\n```","level":"critical"},{"text":"In codeunit 5812 \"Calculate Standard Cost\", Integration event publisher in or for \"OnCalcProdBOMCostOnBeforeNextLineIteration\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\n[IntegrationEvent(false, false)]\n local procedure OnCalcProdBOMCostOnBeforeNextLineIteration(ProductionBOMLine: Record \"Production BOM Line\"; PBOMVersionCode: Code[20]; Level: Integer; CompItemQtyBase: Decimal; CompItem: Record Item; SLMat: Decimal)\n begin\n end;\n```","level":"critical"},{"text":"The change is applied to exactly 2 affected .al file(s) across these layers: IT, W1. The affected files are: App/Layers/IT/BaseApp/Manufacturing/StandardCost/CalculateStandardCost.Codeunit.al, App/Layers/W1/BaseApp/Manufacturing/StandardCost/CalculateStandardCost.Codeunit.al.","level":"critical"},{"text":"The implementation is limited to the requested extensibility change and does not modify unrelated application behavior or files.","level":"expected"}]} +{"metadata":{"area":"inventory"},"repo":"microsoftInternal/NAV","instance_id":"microsoftInternal__NAV-Ext_Request_Impl-29888","base_commit":"ce3ee4e3ee1728dc5aa05fc495f0f9dbeea6a4ff","created_at":"2026-04-08","environment_setup_version":"28.0","project_paths":["App/Layers/W1/BaseApp"],"patch":"diff --git a/App/Layers/W1/BaseApp/Inventory/Forecast/DemandForecastVariantMatrix.Page.al b/App/Layers/W1/BaseApp/Inventory/Forecast/DemandForecastVariantMatrix.Page.al\nindex 794f823dcac..4cd6f55580c 100644\n--- a/App/Layers/W1/BaseApp/Inventory/Forecast/DemandForecastVariantMatrix.Page.al\n+++ b/App/Layers/W1/BaseApp/Inventory/Forecast/DemandForecastVariantMatrix.Page.al\n@@ -843,6 +843,7 @@ page 2900 \"Demand Forecast Variant Matrix\"\n ItemWithVariantsQuery: Query \"Item With Variants\";\n ItemWithLocationsQuery: Query \"Item With Locations\";\n EntryNo: Integer;\n+ IsHandled: Boolean;\n begin\n Rec.DeleteAll();\n EntryNo := 0;\n@@ -852,6 +853,11 @@ page 2900 \"Demand Forecast Variant Matrix\"\n if Item.IsEmpty() then\n exit;\n \n+ IsHandled := false;\n+ OnBeforeLoadData(Rec, Item, ItemFilter, LocationFilter, UseLocation, UseVariant, VariantFilter, MaxRowsToLoadVal, IsHandled);\n+ if IsHandled then\n+ exit;\n+\n case GetQueryForMatrix(UseVariant, UseLocation) of\n Database::Item:\n begin\n@@ -1202,6 +1208,11 @@ page 2900 \"Demand Forecast Variant Matrix\"\n begin\n end;\n \n+ [IntegrationEvent(false, false)]\n+ local procedure OnBeforeLoadData(var ForecastItemVariantLoc: Record \"Forecast Item Variant Loc\"; var Item: Record Item; ItemFilter: Text; LocationFilter: Text; UseLocation: Boolean; UseVariant: Boolean; VariantFilter: Text; MaxRowsToLoad: Integer; var IsHandled: Boolean)\n+ begin\n+ end;\n+\n [IntegrationEvent(false, false)]\n local procedure OnLoadDataOnBeforeRecFindFirst(var ForecastItemVariantLoc: Record \"Forecast Item Variant Loc\"; ItemFilter: Text; LocationFilter: Text; UseLocation: Boolean; UseVariant: Boolean; VariantFilter: Text)\n begin\n","expected":[{"text":"In page 2900 \"Demand Forecast Variant Matrix\", Added integration event OnBeforeLoadData in or for \"LoadData\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\nIsHandled := false;\n OnBeforeLoadData(Rec, Item, ItemFilter, LocationFilter, UseLocation, UseVariant, VariantFilter, MaxRowsToLoadVal, IsHandled);\n if IsHandled then\n exit;\n```","level":"critical"},{"text":"In page 2900 \"Demand Forecast Variant Matrix\", Integration event publisher in or for \"OnBeforeLoadData\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\n[IntegrationEvent(false, false)]\n local procedure OnBeforeLoadData(var ForecastItemVariantLoc: Record \"Forecast Item Variant Loc\"; var Item: Record Item; ItemFilter: Text; LocationFilter: Text; UseLocation: Boolean; UseVariant: Boolean; VariantFilter: Text; MaxRowsToLoad: Integer; var IsHandled: Boolean)\n begin\n end;\n```","level":"critical"},{"text":"In page 2900 \"Demand Forecast Variant Matrix\", Added integration event OnLoadDataOnBeforeRecFindFirst in or for \"LoadData\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\n//Point to the first row of the matrix\n OnLoadDataOnBeforeRecFindFirst(Rec, ItemFilter, LocationFilter, UseLocation, UseVariant, VariantFilter);\n if not Rec.IsEmpty() then\n Rec.FindFirst();\n end;\n```","level":"critical"},{"text":"In page 2900 \"Demand Forecast Variant Matrix\", Integration event publisher in or for \"OnLoadDataOnBeforeRecFindFirst\".\n\nThe implementation is consistent with this gold-code excerpt:\n\n```al\n[IntegrationEvent(false, false)]\n local procedure OnLoadDataOnBeforeRecFindFirst(var ForecastItemVariantLoc: Record \"Forecast Item Variant Loc\"; ItemFilter: Text; LocationFilter: Text; UseLocation: Boolean; UseVariant: Boolean; VariantFilter: Text)\n begin\n end;\n```","level":"critical"},{"text":"The change is applied to exactly 1 affected .al file(s) across these layers: W1. The affected files are: App/Layers/W1/BaseApp/Inventory/Forecast/DemandForecastVariantMatrix.Page.al.","level":"critical"},{"text":"The implementation is limited to the requested extensibility change and does not modify unrelated application behavior or files.","level":"expected"}]} diff --git a/dataset/extensibility_request_triage.jsonl b/dataset/extensibility_request_triage.jsonl index c5e7cd89f..7ba62a309 100644 --- a/dataset/extensibility_request_triage.jsonl +++ b/dataset/extensibility_request_triage.jsonl @@ -4,7 +4,7 @@ {"metadata": {}, "repo": "microsoftInternal/NAV", "instance_id": "microsoftInternal__NAV-Ext_Request_Triage-29557", "base_commit": "706e179dd811ac4c9ef3a474b53d64fa852ad420", "created_at": "2025-06-01", "environment_setup_version": "27.0", "project_paths": ["App/Layers/W1/BaseApp"], "title": "Report 6 \"Trial Balance\" - add area(Content) to request page", "description": "### Why do you need this change?\n\nIn 4PS Construct we want to extend request page of report 6 \"Trial Balance\" with new field and it is not possible to do it.\n\n### Describe the request\n\nDear ALAppExtensions team,\n\nOn behalf of 4PS I would like to request adding Content area to request page of report 6 \"Trial Balance\".\nCurrently it not possible to add a new field to request page using report extension due to error \"The control 'Content' is not found in the target 'RequestOptionsPage'\".\n\n````\n requestpage\n {\n SaveValues = true;\n AboutTitle = 'About Trial Balance';\n AboutText = 'View a snapshot of your chart of accounts with a balance at date and net change in the specified period.';\n\n layout\n {\n area(Content) { } //new\n }\n\n actions\n {\n }\n }\n````", "comments": "", "current_labels": [], "expected": [{"text": "The triage decision sets no labels (labels_to_set is empty).", "level": "critical"}, {"text": "The triage decision sets issue_state to 'closed'.", "level": "critical"}, {"text": "The advisory comment posted to the requester reaches the same triage conclusion and provides guidance consistent with the following reference comment:\n\nThis request cannot be implemented.\n\n**Reason:** The target code (Report 6 \"Trial Balance\") is marked as obsolete and cannot be modified. The report has `ObsoleteState = Pending`, `ObsoleteTag = '28.0'`, and is wrapped in `#if not CLEAN28` preprocessor directive. The `ObsoleteReason` states: \"This report has been replaced by the report Trial Balance (Excel). This report will be removed in a future release.\"", "level": "expected"}]} {"metadata": {}, "repo": "microsoftInternal/NAV", "instance_id": "microsoftInternal__NAV-Ext_Request_Triage-29576", "base_commit": "06e095c485e474431177e2170c0e22182bfdcc28", "created_at": "2025-06-01", "environment_setup_version": "27.0", "project_paths": ["App/Layers/W1/BaseApp"], "title": "[Event Requests] - Table 83 \"Item Journal Line\"", "description": "### Why do you need this change?\n\n1. Please add an event publisher before the if \"Qty. (Phys. Inventory)\" >= \"Qty. (Calculated\") block in the OnValidate trigger of _Qty. (Phys. Inventory)_.\nThe event should include an IsHandled flag so extensions can skip the standard Validate(\"Entry Type\") logic and assign the field value directly without triggering validation.\n2. Please add a new event publisher before the Validate(\"Setup Time\") and Validate(\"Run Time\") calls in the _Concurrent Capacity_ field – OnValidate trigger. The publisher should include an IsHandled parameter so extensions can override this logic and assign the values without executing the standard validation triggers.\n\n### Describe the request\n\n1. OnValidate trigger field 54 \"Qty. (Phys. Inventory)\"\n``````al\nfield(54; \"Qty. (Phys. Inventory)\"; Decimal)\n{\n ...\n trigger OnValidate()\n var\n IsHandled : Boolean; //New local variable\n begin\n ...\n\n PhysInvtEntered := true;\n Quantity := 0;\n //Code change - Start\n OnBeforeCheckQuantity(Rec, xRec, IsHandled);\n If not IsHandled then\n if \"Qty. (Phys. Inventory)\" >= \"Qty. (Calculated)\" then begin\n Validate(\"Entry Type\", \"Entry Type\"::\"Positive Adjmt.\");\n Validate(Quantity, \"Qty. (Phys. Inventory)\" - \"Qty. (Calculated)\");\n end else begin\n Validate(\"Entry Type\", \"Entry Type\"::\"Negative Adjmt.\");\n Validate(Quantity, \"Qty. (Calculated)\" - \"Qty. (Phys. Inventory)\");\n end;\n //Code change - End\n PhysInvtEntered := false;\n end;\n\n[IntegrationEvent(false, false)]\nlocal procedure OnBeforeCheckQuantity(var ItemJournalLine: Record \"Item Journal Line\"; xItemJournalLine: Record \"Item Journal Line\"; var IsHandled: Boolean)\nbegin\nend;\n``````\n2. OnValidate trigger field 5849 \"Concurrent Capacity\"\n``````al\nfield(5849; \"Concurrent Capacity\"; Decimal)\n{\n ...\n trigger OnValidate()\n var\n WorkCenter: Record \"Work Center\";\n ShopCalendarMgt: Codeunit \"Shop Calendar Management\";\n TotalTime: Integer;\n IsHandled : Boolean; //New local variable\n begin\n ...\n WorkCenter.Get(\"Work Center No.\");\n OnBeforeTimeValidation(Rec, xRec, IsHandled);\n if not IsHandled then begin\n Validate(\"Setup Time\", 0);\n Validate(\n \"Run Time\",\n Round(\n TotalTime / ShopCalendarMgt.TimeFactor(\"Cap. Unit of Measure Code\") *\n \"Concurrent Capacity\", WorkCenter.\"Calendar Rounding Precision\"));\n end;\n end;\n}\n\n[IntegrationEvent(false, false)]\nlocal procedure OnBeforeTimeValidation(var ItemJournalLine: Record \"Item Journal Line\"; xItemJournalLine: Record \"Item Journal Line\"; var IsHandled: Boolean)\nbegin\nend;\n``````", "comments": "", "current_labels": [], "expected": [{"text": "The triage decision sets labels_to_set to exactly these managed labels and no others: missing-info.", "level": "critical"}, {"text": "The triage decision sets issue_state to 'open'.", "level": "critical"}, {"text": "The advisory comment posted to the requester reaches the same triage conclusion and provides guidance consistent with the following reference comment:\n\nHi @exnihiloo,\n\nThanks for submitting this extensibility request. To help us process it efficiently, please update the issue to include the required information.\n\n📚 [Extensibility Guidelines](https://learn.microsoft.com/en-us/dynamics365/business-central/dev-itpro/developer/devenv-contribute-extensibility)\n\n**Missing Information:**\n\n- **Alternatives Evaluated**: Which existing events or patterns were tried and why are they insufficient?\n- **Justification for IsHandled**: Why is a standard event (without IsHandled) or alternative approach not feasible? What specific business logic must be skipped/replaced and why is bypass essential?\n- **Performance Considerations**: How frequently will these events be triggered? What is the expected performance impact?\n- **Data Sensitivity Review**: Are there any sensitive data exposure concerns? Please confirm data security implications.\n- **Multi-Extension Interaction**: What are the risks if multiple extensions subscribe to these events with IsHandled? How would conflicts be handled?\n\nPlease update the issue with the missing details. We'll automatically re-analyze once updated.", "level": "expected"}]} {"metadata": {}, "repo": "microsoftInternal/NAV", "instance_id": "microsoftInternal__NAV-Ext_Request_Triage-29465", "base_commit": "706e179dd811ac4c9ef3a474b53d64fa852ad420", "created_at": "2025-06-01", "environment_setup_version": "27.0", "project_paths": ["App/Layers/W1/BaseApp"], "title": "[extensibility request] - Purch Post + Print - Event OnAfterConfirmPost", "description": "### Why do you need this change?\n\nCould PurchaseHeader be set as reference?\n\nVar PurchaseHeader:Record \"Purchase Header\"\n\n### Describe the request\n\nI need this because i want to modify purchase header.\n\n```\n[IntegrationEvent(false, false)]\n local procedure OnAfterConfirmPost(var PurchaseHeader: Record \"Purchase Header\"; var IsHandled: Boolean)\n begin\n end;\n```\n\nWe have already looked at existing events in the purchase posting flow but none of them expose the PurchaseHeader at the right point after the confirm dialog.\nThe IsHandled flag is needed so we can fully replace the default post-confirmation logic when our extension requires different behavior.\nThis event is triggered only when a user explicitly confirms posting, so the performance impact is negligible.\nThe PurchaseHeader record does not expose sensitive data beyond what is already visible in the purchase posting UI.\nIf multiple extensions subscribe with IsHandled, the last one to set it to true wins, which is acceptable given the narrow use case.", "comments": "", "current_labels": [], "expected": [{"text": "The triage decision sets no labels (labels_to_set is empty).", "level": "critical"}, {"text": "The triage decision sets issue_state to 'closed'.", "level": "critical"}, {"text": "The advisory comment posted to the requester reaches the same triage conclusion and provides guidance consistent with the following reference comment:\n\n✅ **Good news! This is already implemented in the codebase.**\n\nThe requested change already exists. The `PurchaseHeader` parameter in the `OnAfterConfirmPost` event **already has the `var` modifier**:\n\n**Existing implementation:**\n\n```al\n[IntegrationEvent(false, false)]\nlocal procedure OnAfterConfirmPost(var PurchaseHeader: Record \"Purchase Header\"; var IsHandled: Boolean)\nbegin\nend;\n```\n\n**File:** `PurchPostPrint.Codeunit.al`\n\nYou can use this existing event in your extension to modify the Purchase Header after the post confirmation. Closing this issue as the request is already satisfied.", "level": "expected"}]} -{"metadata": {}, "repo": "microsoftInternal/NAV", "instance_id": "microsoftInternal__NAV-Ext_Request_Triage-29459-1", "base_commit": "06e095c485e474431177e2170c0e22182bfdcc28", "created_at": "2025-06-01", "environment_setup_version": "27.0", "project_paths": ["App/Layers/W1/BaseApp"], "title": "[Event Request] Codeunit 5880 \"Phys. Invt. Order-Finish\"", "description": "### Why do you need this change?\n\nHi,\ni need an event in the Codeunit 5880 \"Phys. Invt. Order-Finish\" in the procedure \"Code\"() to modify the PhysInvtOrderLine record before creating the reservation entries.\n\n### Describe the request\n\nAdd a new event in the procedure \"Code\"(), before the procedure \"CreateReservationEntries\".\n\n```\nprocedure \"Code\"()\nvar\n ItemTrackingSetup: Record \"Item Tracking Setup\";\n IsHandled: Boolean;\n begin\n ...\n if PhysInvtOrderLine.\"Use Item Tracking\" and\n not IsBinMandatoryNoWhseTracking(Item, PhysInvtOrderLine.\"Location Code\")\n then begin\n PhysInvtOrderLine.\"Pos. Qty. (Base)\" := 0;\n PhysInvtOrderLine.\"Neg. Qty. (Base)\" := 0;\n TempInvtOrderTrackingBuffer.Reset();\n TempInvtOrderTrackingBuffer.DeleteAll();\n CreateOrderTrackingBufferLines(PhysInvtOrderLine.\"Document No.\", PhysInvtOrderLine.\"Line No.\");\n\n // Start Event\n OnCodeOnBeforeCreateReservationEntriesAfterCreateOrderTrackingBufferLines(PhysInvtOrderLine);\n // End Event\n\n CreateReservationEntries(PhysInvtOrderLine.\"Document No.\", PhysInvtOrderLine.\"Line No.\", true, 0);\n end else\n ...\nend;\n```\n\nAdd the event publisher at the end of the codeunit:\n\n```\n[IntegrationEvent(false, false)]\nlocal procedure OnCodeOnBeforeCreateReservationEntriesAfterCreateOrderTrackingBufferLines(var PhysInvtOrderLine: Record \"Phys. Invt. Order Line\")\nbegin\nend;\n```\n\nInternal work item: [AB#614919](https://dynamicssmb2.visualstudio.com/1fcb79e7-ab07-432a-a3c6-6cf5a88ba4a5/_workitems/edit/614919)", "comments": "", "current_labels": [], "expected": [{"text": "The triage decision sets labels_to_set to exactly these managed labels and no others: missing-info.", "level": "critical"}, {"text": "The triage decision sets issue_state to 'open'.", "level": "critical"}, {"text": "The advisory comment posted to the requester reaches the same triage conclusion and provides guidance consistent with the following reference comment:\n\n⚠️ **Clarification needed**\n\n---\n\nWe noticed there is an existing event `OnBeforePhysInvtOrderLineModify` that fires before `PhysInvtOrderLine.Modify()` and provides access to the same `PhysInvtOrderLine` record.\n\n**Question:** Could you use the existing `OnBeforePhysInvtOrderLineModify` event for your scenario?\n\nIf not, please explain:\n1. What specific modifications do you need to make to `PhysInvtOrderLine`?\n2. Why must these modifications happen **before** `CreateReservationEntries` rather than before `Modify()`?\n3. How does the data flow to `CreateReservationEntries` affect your extension's behavior?\n\nThis helps us avoid adding duplicate events when an existing one could serve the same purpose.\n\n---\n\n**File:** `PhysInvtOrderFinish.Codeunit.al`", "level": "expected"}]} +{"metadata": {}, "repo": "microsoftInternal/NAV", "instance_id": "microsoftInternal__NAV-Ext_Request_Triage-29459-1", "base_commit": "06e095c485e474431177e2170c0e22182bfdcc28", "created_at": "2025-06-01", "environment_setup_version": "27.0", "project_paths": ["App/Layers/W1/BaseApp"], "title": "[Event Request] Codeunit 5880 \"Phys. Invt. Order-Finish\"", "description": "### Why do you need this change?\n\nHi,\ni need an event in the Codeunit 5880 \"Phys. Invt. Order-Finish\" in the procedure \"Code\"() to modify the PhysInvtOrderLine record before creating the reservation entries.\n\n### Describe the request\n\nAdd a new event in the procedure \"Code\"(), before the procedure \"CreateReservationEntries\".\n\n```\nprocedure \"Code\"()\nvar\n ItemTrackingSetup: Record \"Item Tracking Setup\";\n IsHandled: Boolean;\n begin\n ...\n if PhysInvtOrderLine.\"Use Item Tracking\" and\n not IsBinMandatoryNoWhseTracking(Item, PhysInvtOrderLine.\"Location Code\")\n then begin\n PhysInvtOrderLine.\"Pos. Qty. (Base)\" := 0;\n PhysInvtOrderLine.\"Neg. Qty. (Base)\" := 0;\n TempInvtOrderTrackingBuffer.Reset();\n TempInvtOrderTrackingBuffer.DeleteAll();\n CreateOrderTrackingBufferLines(PhysInvtOrderLine.\"Document No.\", PhysInvtOrderLine.\"Line No.\");\n\n // Start Event\n OnCodeOnBeforeCreateReservationEntriesAfterCreateOrderTrackingBufferLines(PhysInvtOrderLine);\n // End Event\n\n CreateReservationEntries(PhysInvtOrderLine.\"Document No.\", PhysInvtOrderLine.\"Line No.\", true, 0);\n end else\n ...\nend;\n```\n\nAdd the event publisher at the end of the codeunit:\n\n```\n[IntegrationEvent(false, false)]\nlocal procedure OnCodeOnBeforeCreateReservationEntriesAfterCreateOrderTrackingBufferLines(var PhysInvtOrderLine: Record \"Phys. Invt. Order Line\")\nbegin\nend;\n```\n\nInternal work item: [AB#614919](https://dynamicssmb2.visualstudio.com/1fcb79e7-ab07-432a-a3c6-6cf5a88ba4a5/_workitems/edit/614919)", "comments": "", "current_labels": [], "expected": [{"text": "The triage decision sets labels_to_set to exactly these managed labels and no others: missing-info.", "level": "critical"}, {"text": "The triage decision sets issue_state to 'open'.", "level": "critical"}, {"text": "The advisory comment posted to the requester reaches the same triage conclusion and provides guidance consistent with the following reference comment:\n\n\u26a0\ufe0f **Clarification needed**\n\nThe requested event would run inside the `PhysInvtOrderLine` repeat loop and fire once for every applicable line. Please explain why per-line execution is required, what operations the subscriber will perform, the expected performance impact, and why an event before or after the loop would not satisfy the scenario.", "level": "expected"}]} {"metadata":{},"repo":"microsoftInternal/NAV","instance_id":"microsoftInternal__NAV-Ext_Request_Triage-29459-2","base_commit":"06e095c485e474431177e2170c0e22182bfdcc28","created_at":"2025-06-01","environment_setup_version":"27.0","project_paths":["App/Layers/W1/BaseApp"],"title":"[Event Request] Codeunit 5880 \"Phys. Invt. Order-Finish\"","description":"### Why do you need this change?\n\nHi,\ni need an event in the Codeunit 5880 \"Phys. Invt. Order-Finish\" in the procedure \"Code\"() to modify the PhysInvtOrderLine record before creating the reservation entries.\n\n### Describe the request\n\nAdd a new event in the procedure \"Code\"(), before the procedure \"CreateReservationEntries\".\n\n```\nprocedure \"Code\"()\nvar\n ItemTrackingSetup: Record \"Item Tracking Setup\";\n IsHandled: Boolean;\n begin\n ...\n if PhysInvtOrderLine.\"Use Item Tracking\" and\n not IsBinMandatoryNoWhseTracking(Item, PhysInvtOrderLine.\"Location Code\")\n then begin\n PhysInvtOrderLine.\"Pos. Qty. (Base)\" := 0;\n PhysInvtOrderLine.\"Neg. Qty. (Base)\" := 0;\n TempInvtOrderTrackingBuffer.Reset();\n TempInvtOrderTrackingBuffer.DeleteAll();\n CreateOrderTrackingBufferLines(PhysInvtOrderLine.\"Document No.\", PhysInvtOrderLine.\"Line No.\");\n\n // Start Event\n OnCodeOnBeforeCreateReservationEntriesAfterCreateOrderTrackingBufferLines(PhysInvtOrderLine);\n // End Event\n\n CreateReservationEntries(PhysInvtOrderLine.\"Document No.\", PhysInvtOrderLine.\"Line No.\", true, 0);\n end else\n ...\nend;\n```\n\nAdd the event publisher at the end of the codeunit:\n\n```\n[IntegrationEvent(false, false)]\nlocal procedure OnCodeOnBeforeCreateReservationEntriesAfterCreateOrderTrackingBufferLines(var PhysInvtOrderLine: Record \"Phys. Invt. Order Line\")\nbegin\nend;\n```\n\nInternal work item: [AB#614919](https://dynamicssmb2.visualstudio.com/1fcb79e7-ab07-432a-a3c6-6cf5a88ba4a5/_workitems/edit/614919)","comments":"**Comment 1 (AleksandricMarko):**\n⚠️ **Clarification needed**\n\n---\n\nWe noticed there is an existing event `OnBeforePhysInvtOrderLineModify` that fires before `PhysInvtOrderLine.Modify()` and provides access to the same `PhysInvtOrderLine` record.\n\n**Question:** Could you use the existing `OnBeforePhysInvtOrderLineModify` event for your scenario?\n\nIf not, please explain:\n1. What specific modifications do you need to make to `PhysInvtOrderLine`?\n2. Why must these modifications happen **before** `CreateReservationEntries` rather than before `Modify()`?\n3. How does the data flow to `CreateReservationEntries` affect your extension's behavior?\n\nThis helps us avoid adding duplicate events when an existing one could serve the same purpose.\n\n---\n\n**File:** `PhysInvtOrderFinish.Codeunit.al`\n\n---\n\n**Comment 2 (Mariangela-DeMaio-EOS):**\nHi,\nthanks for the suggestion, I think I can use the event \"OnBeforePhysInvtOrderLineModify\".","current_labels":["missing-info"],"expected":[{"text":"The triage decision either sets no labels (labels_to_set is empty) or sets only the 'missing-info' label; both are acceptable.","level":"critical"},{"text":"The triage decision sets issue_state to 'closed'.","level":"critical"},{"text":"The advisory comment posted to the requester reaches the same triage conclusion and provides guidance consistent with the following reference comment:\n\nThanks for confirming!\n\nSince the existing `OnBeforePhysInvtOrderLineModify` event works for your scenario, no new event is needed. This event provides `var PhysInvtOrderLine` allowing you to modify the record before it's saved.\n\n**Existing event you can use:**\n\n```al\n[IntegrationEvent(false, false)]\nlocal procedure OnBeforePhysInvtOrderLineModify(var PhysInvtOrderLine: Record \"Phys. Invt. Order Line\")\nbegin\nend;\n```\n\n**File:** `PhysInvtOrderFinish.Codeunit.al`\n\nClosing this issue as your need is already satisfied by the existing event.","level":"expected"}]} {"metadata": {}, "repo": "microsoftInternal/NAV", "instance_id": "microsoftInternal__NAV-Ext_Request_Triage-29455", "base_commit": "06e095c485e474431177e2170c0e22182bfdcc28", "created_at": "2025-06-01", "environment_setup_version": "27.0", "project_paths": ["App/Layers/W1/BaseApp"], "title": "[Extend publisher] Codeunit 99000771 BOM Matrix Management - OnBeforeBuildMatrix", "description": "### Why do you need this change?\n\nThe problem occurs with the prod. bom version comparison when a production bom has another sub bom in the production bom lines. If this sub bom has multiple versions then it is possible hat the comparison shows not the components of the active certified version but of a newer one which is currently under development. In the case part of the \"BuildMatrix\" procedure is the following GetVersion call\n\nHowever, this does not filter for the current version or even consider the status, but only the start date, which can result in the active version not being returned.\n\n### Describe the request\n\nIt would be desirable if either the onbeforebuildmatrix event were adjusted and the VersionCode parameter were declared as a var parameter so that, if necessary, the active version could be set manually in this event.\n\nor if the GetVersion function were to return the current version directly, as on the \"Production BOM\" page using the exixting GetBOMVersion procedure of codeunit VersionManagement VersionManagement.GetBOMVersion(Rec.\"No.\", WorkDate(), true);\n\nInternal work item: [AB#614921](https://dynamicssmb2.visualstudio.com/1fcb79e7-ab07-432a-a3c6-6cf5a88ba4a5/_workitems/edit/614921)", "comments": "", "current_labels": [], "expected": [{"text": "The triage decision sets labels_to_set to exactly these managed labels and no others: SCM, event-request.", "level": "critical"}, {"text": "The triage decision sets issue_state to 'open'.", "level": "critical"}, {"text": "The advisory comment posted to the requester reaches the same triage conclusion and provides guidance consistent with the following reference comment:\n\n✅ **Analysis complete - approved for implementation**\n\n---\n\n**Implementation:**\n\nExtend the existing `OnBeforeBuildMatrix` event publisher in Codeunit 99000771 \"BOM Matrix Management\" by changing the `VersionCode` parameter to a `var` parameter, allowing subscribers to override the version code.\n\n**Current code:**\n\n```al\n[IntegrationEvent(false, false)]\nlocal procedure OnBeforeBuildMatrix(ProductionBOMNo: Code[20]; VersionCode: Code[20]; Level: Integer; Quantity: Decimal; var IsHandled: Boolean)\nbegin\nend;\n```\n\n**Proposed change:**\n\n```al\n[IntegrationEvent(false, false)]\nlocal procedure OnBeforeBuildMatrix(ProductionBOMNo: Code[20]; var VersionCode: Code[20]; Level: Integer; Quantity: Decimal; var IsHandled: Boolean)\nbegin\nend;\n```\n\n---\n\n**File:** `BOMMatrixManagement.Codeunit.al`", "level": "expected"}]} {"metadata": {}, "repo": "microsoftInternal/NAV", "instance_id": "microsoftInternal__NAV-Ext_Request_Triage-29454", "base_commit": "06e095c485e474431177e2170c0e22182bfdcc28", "created_at": "2025-06-01", "environment_setup_version": "27.0", "project_paths": ["App/Layers/W1/BaseApp"], "title": "[Request for External] table 7001 \"Price List Line\" - CheckAmountType", "description": "### Why do you need this change?\n\nCan you remove local from provedure CheckAmountType in table 7001 \"Price List Line\"?\n\n### Describe the request\n\nI need this to avoid making duplicate code, as I need to check the same scenario.\nInternal work item: [AB#614920](https://dynamicssmb2.visualstudio.com/1fcb79e7-ab07-432a-a3c6-6cf5a88ba4a5/_workitems/edit/614920)", "comments": "", "current_labels": [], "expected": [{"text": "The triage decision sets labels_to_set to exactly these managed labels and no others: SCM, request-for-external.", "level": "critical"}, {"text": "The triage decision sets issue_state to 'open'.", "level": "critical"}, {"text": "The advisory comment posted to the requester reaches the same triage conclusion and provides guidance consistent with the following reference comment:\n\n✅ **Analysis complete - approved for implementation**\n\n---\n\n**Implementation:**\n\nChange the `CheckAmountType` procedure from `local` to public (remove the `local` keyword) in table 7001 \"Price List Line\".\n\n**Current code:**\n\n```al\nlocal procedure CheckAmountType(FldCaption: Text; AmountType: Enum \"Price Amount Type\")\nbegin\n if \"Amount Type\" = AmountType then\n Error(FieldNotAllowedForAmountTypeErr, FldCaption, FieldCaption(\"Amount Type\"), Format(\"Amount Type\"));\nend;\n```\n\n**Proposed change:**\n\n```al\nprocedure CheckAmountType(FldCaption: Text; AmountType: Enum \"Price Amount Type\")\nbegin\n if \"Amount Type\" = AmountType then\n Error(FieldNotAllowedForAmountTypeErr, FldCaption, FieldCaption(\"Amount Type\"), Format(\"Amount Type\"));\nend;\n```\n\n---\n\n**File:** `PriceListLine.Table.al`", "level": "expected"}]} @@ -12,6 +12,19 @@ {"metadata": {}, "repo": "microsoftInternal/NAV", "instance_id": "microsoftInternal__NAV-Ext_Request_Triage-29453-2", "base_commit": "06e095c485e474431177e2170c0e22182bfdcc28", "created_at": "2025-06-01", "environment_setup_version": "27.0", "project_paths": ["App/Layers/W1/BaseApp"], "title": "[Event Request] page 7001 \"Price List Lines\" - OnAfterUpdateColumnVisibility", "description": "### Why do you need this change?\n\nCan you change IncludeSender to true, so i can get information from the page and be able to set visibility for my own fields?\n\n```\n //[IntegrationEvent(false, false)]\n [IntegrationEvent(true, false)]\n local procedure OnAfterUpdateColumnVisibility(PriceListHeader: Record \"Price List Header\"; var SourceTypeVisible: Boolean; var JobSourceTypeVisible: Boolean)\n begin\n end;\n```\n\n### Describe the request\n\n..\nInternal work item: [AB#615080](https://dynamicssmb2.visualstudio.com/1fcb79e7-ab07-432a-a3c6-6cf5a88ba4a5/_workitems/edit/615080)", "comments": "**Comment 1 (AleksandricMarko):**\nThank you for your request. To process this event modification, please provide the following missing information:\n\n**1. Complete Description:**\nThe \"Describe the request\" section is incomplete. Please provide:\n- What specific problem you're trying to solve\n- What information from the page you need to access\n- Why the current event parameters are insufficient\n- How you plan to use the page sender reference\n\n**2. Detailed Justification for IncludeSender=true:**\nChanging IncludeSender to true is a critical modification that requires careful justification. Please explain:\n- **Why subscribers MUST have access to the page instance** - what specific page properties, methods, or state do you need to access?\n- **Why the current event parameters (PriceListHeader, SourceTypeVisible, JobSourceTypeVisible) are insufficient** - what can't you accomplish with these?\n- **What alternatives you evaluated** - why can't you achieve your goal by adding parameters to the event instead?\n- **Specific use case** - describe the exact scenario where your extension needs page instance access\n\nPlease update the issue with this information so we can evaluate the request properly.\n\n---\n\n**Comment 2 (auzhhv):**\nHi Alexander,\n\n**1. Complete Description:**\nWe have added custom fields that should behave simular to other fields in the same page regarding visibility. These fields have custom criterias for visibility, but the points where our visibility variables should be updated is the same as the existing fields. The event is called OnAfterUpdateColumnVisibility, but it's not possible to update visibility for other fields because of access. As we cannot add custom variables to events, we need access to find and change other events on pages. We will add procedures in the a page extension to access our visibility variables. Ex. SetField1Visibility(NewVisibility) where Field1 is the name of our field.\n\n**2. Detailed Justification for IncludeSender=true:**\nWe must have access to the page to be able to set the our own visibility variables.\nIt makes no sense to put it other places as the name of the event applies that its the correct place to change visibility. And I have not found other places it makes sense to do the same. And this is probably the reason why this is the place base application has the same code.", "current_labels": ["missing-info"], "expected": [{"text": "The triage decision sets labels_to_set to exactly these managed labels and no others: SCM, event-request.", "level": "critical"}, {"text": "The triage decision sets issue_state to 'open'.", "level": "critical"}, {"text": "The advisory comment posted to the requester reaches the same triage conclusion and provides guidance consistent with the following reference comment:\n\n✅ **Analysis complete - approved for implementation**\n\n---\n\n**Implementation:**\n\nChange `IncludeSender` from `false` to `true` on the existing `OnAfterUpdateColumnVisibility` event in Page 7001 \"Price List Lines\" to allow subscribers to access the page instance.\n\n**Current code (around line 490):**\n\n```al\n[IntegrationEvent(false, false)]\nlocal procedure OnAfterUpdateColumnVisibility(PriceListHeader: Record \"Price List Header\"; var SourceTypeVisible: Boolean; var JobSourceTypeVisible: Boolean)\nbegin\nend;\n```\n\n**Proposed change:**\n\n```al\n[IntegrationEvent(true, false)]\nlocal procedure OnAfterUpdateColumnVisibility(PriceListHeader: Record \"Price List Header\"; var SourceTypeVisible: Boolean; var JobSourceTypeVisible: Boolean)\nbegin\nend;\n```\n\n---\n\n**File:** `PriceListLines.Page.al`", "level": "expected"}]} {"metadata": {}, "repo": "microsoftInternal/NAV", "instance_id": "microsoftInternal__NAV-Ext_Request_Triage-29443", "base_commit": "06e095c485e474431177e2170c0e22182bfdcc28", "created_at": "2025-06-01", "environment_setup_version": "27.0", "project_paths": ["App/Layers/W1/BaseApp"], "title": "[W1][Page][171][Standard Sales Code Subform] Make procedure UpdateTypeText() not local", "description": "### Why do you need this change?\n\nProcedure UpdateTypeText() is in local scope and it updates field variable TypeAsText. In our page extension we want to call this same UpdateTypeText logic rather than duplicating it, so the TypeAsText formatting stays consistent with the base page instead of us copying the procedure into our own code.\n\n### Describe the request\n\nRemove \"local\" scope from procedure UpdateTypeText() in page 171 \"Standard Sales Code Subform\"\nInternal work item: [AB#614045](https://dynamicssmb2.visualstudio.com/1fcb79e7-ab07-432a-a3c6-6cf5a88ba4a5/_workitems/edit/614045)", "comments": "", "current_labels": [], "expected": [{"text": "The triage decision sets labels_to_set to exactly these managed labels and no others: SCM, request-for-external.", "level": "critical"}, {"text": "The triage decision sets issue_state to 'open'.", "level": "critical"}, {"text": "The advisory comment posted to the requester reaches the same triage conclusion and provides guidance consistent with the following reference comment:\n\n\u2705 Analysis complete - approved for implementation\n\n**Implementation:**\n\nRemove `local` scope from procedure `UpdateTypeText()` in Page 171 \"Standard Sales Code Subform\":\n\n```al\nprocedure UpdateTypeText()\nvar\n RecRef: RecordRef;\nbegin\n RecRef.GetTable(Rec);\n TypeAsText := TempOptionLookupBuffer.FormatOption(RecRef.Field(Rec.FieldNo(Type)));\nend;\n```", "level": "expected"}]} {"metadata": {}, "repo": "microsoftInternal/NAV", "instance_id": "microsoftInternal__NAV-Ext_Request_Triage-29441", "base_commit": "06e095c485e474431177e2170c0e22182bfdcc28", "created_at": "2025-06-01", "environment_setup_version": "27.0", "project_paths": ["App/Layers/W1/BaseApp"], "title": "[W1][Page][289][Recurring Job Jnl.] Move variables to protected variables", "description": "### Why do you need this change?\n\nVariables used as field values need to be accessable so they could be updated after changes from new fields\n\n### Describe the request\n\nPlease move variables JobDescription and AccName to protected variables", "comments": "", "current_labels": [], "expected": [{"text": "The triage decision sets labels_to_set to exactly these managed labels and no others: SCM, request-for-external.", "level": "critical"}, {"text": "The triage decision sets issue_state to 'open'.", "level": "critical"}, {"text": "The advisory comment posted to the requester reaches the same triage conclusion and provides guidance consistent with the following reference comment:\n\n✅ Analysis complete - approved for implementation\n\n**Implementation:**\n\nMove `JobDescription` and `AccName` variables from `var` to `protected var` section in Page 289 \"Recurring Job Jnl.\":\n\n```al\nvar\n JobJnlManagement: Codeunit JobJnlManagement;\n ReportPrint: Codeunit \"Test Report-Print\";\n JobJnlReconcile: Page \"Job Journal Reconcile\";\n CurrentJnlBatchName: Code[10];\n\nprotected var\n JobDescription: Text[100];\n AccName: Text[100];\n ShortcutDimCode: array[8] of Code[20];\n```", "level": "expected"}]} -{"metadata": {}, "repo": "microsoftInternal/NAV", "instance_id": "microsoftInternal__NAV-Ext_Request_Triage-29755", "base_commit": "06e095c485e474431177e2170c0e22182bfdcc28", "created_at": "2025-06-01", "environment_setup_version": "27.0", "project_paths": ["App/Layers/W1/BaseApp"], "title": "[Event Request] codeunit 7322 \"Create Inventory Pick/Movement\" - procedure CreateInvtMvntWithoutSource", "description": "### Why do you need this change?\n\nCurrently there is no way to circumvent the \"There is nothing to handle\" error.\n\n### Alternatives Evaluated:\nThere are no alternatives for this issue. All events are either too early or too late.\n\n### Justification for IsHandled:\nWe need to be able to exit the procedure without the error.\n\n### Performance Considerations:\nCalled once per procedure execution, only if there is an error. Negligible impact.\n\n### Data Sensitivity Review:\nNo significantly sensitive data would be exposed through this event.\n\n### Multi-extension interaction:\nThere is no risk if multiple extensions are subscribed.\n\n### Describe the request\n\nCan you add an event when raising the error \"There is nothing to handle\"\n\n```AL\nprocedure CreateInvtMvntWithoutSource(var InternalMovementHeader: Record \"Internal Movement Header\")\n var\n InternalMovementLine: Record \"Internal Movement Line\";\n NewWarehouseActivityLine: Record \"Warehouse Activity Line\";\n RemQtyToPickBase: Decimal;\n //>>> New\n IsHandled: Boolean;\n //<<< New\n begin\n if not HideDialog then\n if not Confirm(CreateInvtMvmtQst, false) then\n exit;\n\n ...\n\n FindNextLineNo();\n\n repeat\n NewWarehouseActivityLine.Init();\n ...\n CreatePickOrMoveLine(NewWarehouseActivityLine, RemQtyToPickBase, RemQtyToPickBase, false);\n until InternalMovementLine.Next() = 0;\n\n if NextLineNo = 10000 then begin\n //>>> New\n OnCreateInvtMvntWithoutSourceOnBeforeNothingToHandleError(IsHandled);\n if IsHandled then\n exit;\n //<<< New\n Error(NothingToHandleMsg);\n end;\n\n MoveWhseComments(InternalMovementHeader.\"No.\", CurrWarehouseActivityHeader.\"No.\");\n\n if DeleteHandledInternalMovementLines(InternalMovementHeader.\"No.\") then begin\n InternalMovementHeader.Delete(true);\n if not HideDialog then\n Message(ActivityCreatedMsg, CurrWarehouseActivityHeader.Type, CurrWarehouseActivityHeader.\"No.\");\n end else\n if not HideDialog then\n Message(TrackingNotFullyAppliedMsg, CurrWarehouseActivityHeader.Type, CurrWarehouseActivityHeader.\"No.\");\n\n OnAfterCreateInvtMvntWithoutSource(CurrWarehouseActivityHeader, InternalMovementHeader);\n end;\n\n //>>> New\n [IntegrationEvent(false, false)]\n local procedure OnCreateInvtMvntWithoutSourceOnBeforeNothingToHandleError(var IsHandled: Boolean)\n begin\n end;\n //<<< New\n```\nInternal work item: [AB#623063](https://dynamicssmb2.visualstudio.com/1fcb79e7-ab07-432a-a3c6-6cf5a88ba4a5/_workitems/edit/623063)", "comments": "", "current_labels": [], "expected": [{"text": "The triage decision sets labels_to_set to exactly these managed labels and no others: SCM, event-request.", "level": "critical"}, {"text": "The triage decision sets issue_state to 'open'.", "level": "critical"}, {"text": "The advisory comment posted to the requester reaches the same triage conclusion and provides guidance consistent with the following reference comment:\n\n✅ **Analysis complete - approved for implementation**\n\n---\n\n**Implementation:**\n\nAdd a new integration event in the `CreateInvtMvntWithoutSource` procedure to allow bypassing the \"nothing to handle\" error.\n\n**Location in `CreateInvtMvntWithoutSource` procedure (around line 1598):**\n\n```al\nif NextLineNo = 10000 then begin\n IsHandled := false;\n OnCreateInvtMvntWithoutSourceOnBeforeNothingToHandleError(IsHandled);\n if not IsHandled then\n Error(NothingToHandleMsg);\nend;\n```\n\n**Event Publisher (add at the end of the codeunit with other events):**\n\n```al\n[IntegrationEvent(false, false)]\nlocal procedure OnCreateInvtMvntWithoutSourceOnBeforeNothingToHandleError(var IsHandled: Boolean)\nbegin\nend;\n```\n\n---\n\n**File:** `CreateInventoryPickMovement.Codeunit.al`", "level": "expected"}]} -{"metadata": {}, "repo": "microsoftInternal/NAV", "instance_id": "microsoftInternal__NAV-Ext_Request_Triage-29767", "base_commit": "06e095c485e474431177e2170c0e22182bfdcc28", "created_at": "2025-06-01", "environment_setup_version": "27.0", "project_paths": ["App/Layers/W1/BaseApp"], "title": "[Request for Extrenal] Report 8051 \"Contract Deferrals Release\"", "description": "### Why do you need this change?\n\nIn order to document the Contract Deferrals release for customer and vendor with additional data in G/L Entries, we require certain events.\n\n### Describe the request\n\nWe need an integration event at the procedure\n\nlocal procedure InsertTempGenJournalLine(DocumentNo: Code[20]; ContractNo: Code[20]; DeferralEntryNo: Integer; DimSetID: Integer; AccountNo: Code[20]; BalAccountNo: Code[20]; PostingAmount: Decimal; GenBusPostingGroup: Code[20]; GenProdPostingGroup: Code[20]; Partner: Enum \"Service Partner\")\nbegin\n LineNo += 1;\n TempGenJournalLine.\"Account No.\" := AccountNo;\n TempGenJournalLine.\"Bal. Account No.\" := BalAccountNo;\n TempGenJournalLine.\"Document No.\" := DocumentNo;\n TempGenJournalLine.\"Subscription Contract No.\" := ContractNo;\n TempGenJournalLine.\"Gen. Bus. Posting Group\" := GenBusPostingGroup;\n TempGenJournalLine.\"Gen. Prod. Posting Group\" := GenProdPostingGroup;\n TempGenJournalLine.\"Dimension Set ID\" := DimSetID;\n TempGenJournalLine.Amount := PostingAmount;\n TempGenJournalLine.\"Line No.\" := LineNo;\n TempGenJournalLine.\"Deferral Line No.\" := DeferralEntryNo;\n OnBeforeInsertTemGenJournalLine(TempGenJournalLine, Partner)\n TempGenJournalLine.Insert(false);\nend;\n\n[IntegrationEvent(false, false)]\nLocal procedure OnBeforeInsertTemGenJournalLine(var TempGenJournalLine: Record \"Gen. Journal Line\"; Partner: Enum \"Service Partner\")\n\nAnd need event at next procedure for transfer the data in TempGenJournalLine to GenJnlLine before post the data\n\nprocedure PostGenJnlLine(var TempGenJournalLine: Record \"Gen. Journal Line\" temporary; PostingDate: Date; SourceCodeSetupContractDeferralsRelease: Code[10])\n...\n OnBeforePostGenJnlLint(TempGenJournalLine, GenJnlLine);\n GenJnlPostLine.RunWithCheck(GenJnlLine);\n ...\n OnBeforePostGenJnlLine(TempGenJournalLine, GenJnlLine);\n GenJnlPostLine.RunWithCheck(GenJnlLine);\nend;\n\n[IntegrationEvent(false, false)]\nLocal procedure OnBeforePostGenJnlLint(TempGenJournalLine: Record \"Gen. Journal Line\"; var GenJournalLine: Record \"Gen. Journal Line\")\n\n### Sample implementation\n\nHere is roughly how we call it from our side:\n\n```javascript\nfunction releaseContractDeferrals(entries) {\n const lines = entries.map(e => ({ account: e.accountNo, amount: e.postingAmount }));\n return lines.filter(l => l.amount !== 0);\n}\n```\n", "comments": "", "current_labels": [], "expected": [{"text": "The triage decision sets labels_to_set to exactly these managed labels and no others: agent-not-processable.", "level": "critical"}, {"text": "The triage decision sets issue_state to 'open'.", "level": "critical"}, {"text": "No advisory comment is posted to the requester (comment_to_post is empty).", "level": "expected"}]} -{"metadata": {}, "repo": "microsoftInternal/NAV", "instance_id": "microsoftInternal__NAV-Ext_Request_Triage-29789", "base_commit": "181dc724bef8901c9cab0c5a5a5a0e796958adc5", "created_at": "2025-06-01", "environment_setup_version": "27.0", "project_paths": ["App/Layers/W1/BaseApp"], "title": "[Event Request] Missing OnApplyStdCodesToPurchaseLinesOnAfterValidateType event", "description": "### Why do you need this change?\n\nTable 172 \"Standard Customer Sales Code\" exposes `OnApplyStdCodesToSalesLinesOnAfterValidateType` inside `ApplyStdCodesToSalesLines`. This event fires immediately after `Type` is validated on the newly inserted sales line, allowing extensions to react to or complement the type validation — for example, to set custom default values, apply additional field logic, or integrate with third-party modules that depend on the line type being resolved before further fields are set.\n\nTable 175 \"Standard Vendor Purchase Code\" has a symmetric procedure `ApplyStdCodesToPurchaseLines` but is missing the equivalent event. Extensions that extend both the sales and purchase recurring-code flow are unable to implement consistent behavior on the purchase side.\n\nThere is no existing event in `ApplyStdCodesToPurchaseLines` that fires at the same point in the flow (after type validation, before additional field assignments such as `No.` validation):\n\n| Existing event | Position | Sufficient? |\n|---|---|---|\n| `OnBeforeApplyStdCodesToPurchaseLines` | Before loop | Too early |\n| `OnApplyStdCodesToPurchaseLinesOnBeforeStdPurchLineFind` | Before per-line processing | Too early |\n| `OnApplyStdCodesToPurchaseLinesOnAfterPurchLineInsert` | After insert, all fields set | Too late |\n| `OnAfterApplyStdCodesToPurchaseLines` | After full loop | Too late |\n\n### Describe the request\n\n### EventRequest\n\n\n[W1][Table][175][Standard Vendor Purchase Code]\n[ApplyStdCodesToPurchaseLines]\n___\n\nAdd a missing integration event equivalent to\nOnApplyStdCodesToSalesLinesOnAfterValidateType in Table 172.\nThe event should fire immediately after PurchLine.Validate(Type)\ninside the ApplyStdCodesToPurchaseLines loop, passing the current\npurchase line and the standard purchase line as parameters.\n___\n```al\n\n[IntegrationEvent(false, false)]\nlocal procedure OnApplyStdCodesToPurchaseLinesOnAfterValidateType(\n var PurchaseLine: Record \"Purchase Line\";\n StandardPurchaseLine: Record \"Standard Purchase Line\")\nbegin\nend;\n```\n\n### Proposed placement (pseudocode context)\n\n```al\n// inside ApplyStdCodesToPurchaseLines loop:\nPurchLine.Validate(Type, StdPurchLine.Type);\nOnApplyStdCodesToPurchaseLinesOnAfterValidateType(PurchLine, StdPurchLine); // <-- new\nPurchLine.Validate(\"No.\", StdPurchLine.\"No.\");\n```\n\n### Symmetry reference — Table 172 existing event\n\n```al\n// Table 172 \"Standard Customer Sales Code\";\n[IntegrationEvent(false, false)]\nlocal procedure OnApplyStdCodesToSalesLinesOnAfterValidateType(\n var SalesLine: Record \"Sales Line\";\n StandardSalesLine: Record \"Standard Sales Line\")\nbegin\nend;\n```\n\nThe requested event is a direct purchase-side mirror of this existing sales-side event.\n\nInternal work item: [AB#624115](https://dynamicssmb2.visualstudio.com/1fcb79e7-ab07-432a-a3c6-6cf5a88ba4a5/_workitems/edit/624115)", "comments": "", "current_labels": [], "expected": [{"text": "The triage decision sets no labels (labels_to_set is empty).", "level": "critical"}, {"text": "The triage decision sets issue_state to 'closed'.", "level": "critical"}, {"text": "The advisory comment posted to the requester reaches the same triage conclusion and provides guidance consistent with the following reference comment:\n\n✅ **Good news! This is already implemented in the codebase.**\n\nThe requested change already exists:\n\n**Existing implementation:**\n\n```al\n[IntegrationEvent(false, false)]\nlocal procedure OnApplyStdCodesToPurchaseLinesOnLoopStdPurchLine(var StandardVendorPurchaseCode: Record \"Standard Vendor Purchase Code\"; var StandardPurchaseLine: Record \"Standard Purchase Line\"; var PurchaseLine: Record \"Purchase Line\"; var PurchaseHeader: Record \"Purchase Header\"; var StandardPurchaseCode: Record \"Standard Purchase Code\"; var IsHandled: Boolean)\nbegin\nend;\n```\n\n**File:** `StandardVendorPurchaseCode.Table.al`\n\nYou can use this existing event in your extension. Closing this issue as the request is already satisfied.", "level": "expected"}]} +{"metadata": {}, "repo": "microsoftInternal/NAV", "instance_id": "microsoftInternal__NAV-Ext_Request_Triage-29755", "base_commit": "06e095c485e474431177e2170c0e22182bfdcc28", "created_at": "2025-06-01", "environment_setup_version": "27.0", "project_paths": ["App/Layers/W1/BaseApp"], "title": "[Event Request] codeunit 7322 \"Create Inventory Pick/Movement\" - procedure CreateInvtMvntWithoutSource", "description": "### Why do you need this change?\n\nCurrently there is no way to circumvent the \"There is nothing to handle\" error.\n\nThe existing `OnAfterCreateInvtMvntWithoutSource` event cannot be used because the error is raised before that event is reached, while earlier events cannot determine whether `NextLineNo` will remain 10000. When extension logic intentionally creates no movement lines, this is a valid no-op rather than an error. The requested event should suppress only the error and allow the remaining standard finalization logic to continue.\n\n### Performance Considerations:\nCalled once per procedure execution, only if there is an error. Negligible impact.\n\n### Data Sensitivity Review:\nNo significantly sensitive data would be exposed through this event.\n\n### Multi-extension interaction:\nThere is no risk if multiple extensions are subscribed.\n\n### Describe the request\n\nCan you add an event when raising the error \"There is nothing to handle\"\n\n```AL\nprocedure CreateInvtMvntWithoutSource(var InternalMovementHeader: Record \"Internal Movement Header\")\n var\n InternalMovementLine: Record \"Internal Movement Line\";\n NewWarehouseActivityLine: Record \"Warehouse Activity Line\";\n RemQtyToPickBase: Decimal;\n //>>> New\n IsHandled: Boolean;\n //<<< New\n begin\n if not HideDialog then\n if not Confirm(CreateInvtMvmtQst, false) then\n exit;\n\n ...\n\n FindNextLineNo();\n\n repeat\n NewWarehouseActivityLine.Init();\n ...\n CreatePickOrMoveLine(NewWarehouseActivityLine, RemQtyToPickBase, RemQtyToPickBase, false);\n until InternalMovementLine.Next() = 0;\n\n if NextLineNo = 10000 then begin\n //>>> New\n OnCreateInvtMvntWithoutSourceOnBeforeNothingToHandleError(IsHandled);\n if not IsHandled then\n Error(NothingToHandleMsg);\n //<<< New\n end;\n\n MoveWhseComments(InternalMovementHeader.\"No.\", CurrWarehouseActivityHeader.\"No.\");\n\n if DeleteHandledInternalMovementLines(InternalMovementHeader.\"No.\") then begin\n InternalMovementHeader.Delete(true);\n if not HideDialog then\n Message(ActivityCreatedMsg, CurrWarehouseActivityHeader.Type, CurrWarehouseActivityHeader.\"No.\");\n end else\n if not HideDialog then\n Message(TrackingNotFullyAppliedMsg, CurrWarehouseActivityHeader.Type, CurrWarehouseActivityHeader.\"No.\");\n\n OnAfterCreateInvtMvntWithoutSource(CurrWarehouseActivityHeader, InternalMovementHeader);\n end;\n\n //>>> New\n [IntegrationEvent(false, false)]\n local procedure OnCreateInvtMvntWithoutSourceOnBeforeNothingToHandleError(var IsHandled: Boolean)\n begin\n end;\n //<<< New\n```\nInternal work item: [AB#623063](https://dynamicssmb2.visualstudio.com/1fcb79e7-ab07-432a-a3c6-6cf5a88ba4a5/_workitems/edit/623063)", "comments": "", "current_labels": [], "expected": [{"text": "The triage decision sets labels_to_set to exactly these managed labels and no others: SCM, event-request.", "level": "critical"}, {"text": "The triage decision sets issue_state to 'open'.", "level": "critical"}, {"text": "The advisory comment posted to the requester reaches the same triage conclusion and provides guidance consistent with the following reference comment:\n\n\u2705 **Analysis complete - approved for implementation**\n\n---\n\n**Implementation:**\n\nAdd a new integration event in the `CreateInvtMvntWithoutSource` procedure to allow bypassing the \"nothing to handle\" error.\n\n**Location in `CreateInvtMvntWithoutSource` procedure (around line 1598):**\n\n```al\nif NextLineNo = 10000 then begin\n IsHandled := false;\n OnCreateInvtMvntWithoutSourceOnBeforeNothingToHandleError(IsHandled);\n if not IsHandled then\n Error(NothingToHandleMsg);\nend;\n```\n\n**Event Publisher (add at the end of the codeunit with other events):**\n\n```al\n[IntegrationEvent(false, false)]\nlocal procedure OnCreateInvtMvntWithoutSourceOnBeforeNothingToHandleError(var IsHandled: Boolean)\nbegin\nend;\n```\n\n---\n\n**File:** `CreateInventoryPickMovement.Codeunit.al`", "level": "expected"}]} +{"metadata": {}, "repo": "microsoftInternal/NAV", "instance_id": "microsoftInternal__NAV-Ext_Request_Triage-29767", "base_commit": "06e095c485e474431177e2170c0e22182bfdcc28", "created_at": "2025-06-01", "environment_setup_version": "27.0", "project_paths": ["App/Layers/W1/BaseApp"], "title": "JavaScript customization for Contract Deferrals Release", "description": "### Why do you need this change?\n\nWe need to customize the JavaScript integration that prepares contract-deferral journal data before it is sent to Business Central.\n\n### Describe the request\n\nUpdate the following JavaScript processing:\n\n```javascript\nfunction releaseContractDeferrals(entries) {\n const lines = entries.map(e => ({ account: e.accountNo, amount: e.postingAmount }));\n return lines.filter(l => l.amount !== 0);\n}\n```\n\nThis is not a Business Central AL extensibility request and does not require a change to an AL object, event, or extension point.", "comments": "", "current_labels": [], "expected": [{"text": "The triage decision sets labels_to_set to exactly these managed labels and no others: agent-not-processable.", "level": "critical"}, {"text": "The triage decision sets issue_state to 'open'.", "level": "critical"}, {"text": "No advisory comment is posted to the requester (comment_to_post is empty).", "level": "expected"}]} +{"metadata": {}, "repo": "microsoftInternal/NAV", "instance_id": "microsoftInternal__NAV-Ext_Request_Triage-29789", "base_commit": "181dc724bef8901c9cab0c5a5a5a0e796958adc5", "created_at": "2025-06-01", "environment_setup_version": "27.0", "project_paths": ["App/Layers/W1/BaseApp"], "title": "[Event Request] Standard Vendor Purchase Code - OnApplyStdCodesToPurchaseLinesOnLoopStdPurchLine", "description": "### Why do you need this change?\n\nWe need a per-line event in `ApplyStdCodesToPurchaseLines` to modify the purchase line and, when required, replace the standard line processing. The existing `OnBeforeApplyStdCodesToPurchaseLines` and `OnApplyStdCodesToPurchaseLinesOnAfterPurchLineInsert` events are too early or too late, and a regular event cannot replace the standard line processing. The event runs once per standard purchase line with lightweight subscriber logic, exposes only records already in scope, and the first subscriber setting `IsHandled := true` controls the processing.\n\n### Describe the request\n\nAdd the following event to table 175 \"Standard Vendor Purchase Code\":\n\n```al\n[IntegrationEvent(false, false)]\nlocal procedure OnApplyStdCodesToPurchaseLinesOnLoopStdPurchLine(var StandardVendorPurchaseCode: Record \"Standard Vendor Purchase Code\"; var StandardPurchaseLine: Record \"Standard Purchase Line\"; var PurchaseLine: Record \"Purchase Line\"; var PurchaseHeader: Record \"Purchase Header\"; var StandardPurchaseCode: Record \"Standard Purchase Code\"; var IsHandled: Boolean)\nbegin\nend;\n```", "comments": "", "current_labels": [], "expected": [{"text": "The triage decision sets no labels (labels_to_set is empty).", "level": "critical"}, {"text": "The triage decision sets issue_state to 'closed'.", "level": "critical"}, {"text": "The advisory comment posted to the requester reaches the same triage conclusion and provides guidance consistent with the following reference comment:\n\n\u2705 **Good news! This is already implemented in the codebase.**\n\nThe requested change already exists:\n\n**Existing implementation:**\n\n```al\n[IntegrationEvent(false, false)]\nlocal procedure OnApplyStdCodesToPurchaseLinesOnLoopStdPurchLine(var StandardVendorPurchaseCode: Record \"Standard Vendor Purchase Code\"; var StandardPurchaseLine: Record \"Standard Purchase Line\"; var PurchaseLine: Record \"Purchase Line\"; var PurchaseHeader: Record \"Purchase Header\"; var StandardPurchaseCode: Record \"Standard Purchase Code\"; var IsHandled: Boolean)\nbegin\nend;\n```\n\n**File:** `StandardVendorPurchaseCode.Table.al`\n\nYou can use this existing event in your extension. Closing this issue as the request is already satisfied.", "level": "expected"}]} +{"metadata":{},"repo":"microsoftInternal/NAV","instance_id":"microsoftInternal__NAV-Ext_Request_Triage-30269","base_commit":"0914eb0fd16a493b9faa62118d1d97a3b3ed157a","created_at":"2026-01-01","environment_setup_version":"28.0","project_paths":["App/Layers/W1/BaseApp"],"title":"[Event Request] Codeunit 99000822 \"Mfg. Item Jnl.-Post Line\" - PostConsumption procedure","description":"### Why do you need this change?\n\n# Event Request: `OnPostConsumptionOnBeforeInsertRemainingConsumpEntry`\n\nPlease add a new integration event with an `IsHandled` parameter in the `PostConsumption` procedure of codeunit 99000822 \"Mfg. Item Jnl.-Post Line\", immediately before the `InsertConsumpEntry` call that handles the remaining quantity to post.\n\nThe existing event `OnPostConsumptionOnRemQtyToPostOnBeforeInsertConsumpEntry` fires at the correct location but has no `IsHandled` parameter, so there is no way to suppress the `InsertConsumpEntry` call that follows it.\n\nIn some manufacturing scenarios, the remaining consumption entry must be skipped. For example, when `ItemJnlLine.\"Value Entry Type\"` is `Revaluation`, posting a standard consumption entry is incorrect - the line represents a cost correction, not a physical movement, and the `InsertConsumpEntry` call should not run.\n\nWhile `InsertConsumpEntry` does contain an internal check for the `Revaluation` value entry type at the warehouse journal step, this only prevents the warehouse journal line from being created. It does not prevent `sender.PostItem(ItemJnlLine)` from running, which is called unconditionally at the end of `InsertConsumpEntry` for all value entry types. For a revaluation line, this would post an incorrect item ledger entry - a physical consumption movement - on top of what is intended to be a cost-only adjustment. Additionally, before reaching the warehouse check, `InsertConsumpEntry` already overwrites `ItemJnlLine.Quantity`, `ItemJnlLine.\"Quantity (Base)\"`, and related fields with the remaining quantity. These modifications on a revaluation line are also incorrect. The entire call must be skipped, not just the warehouse part inside it.\n\n---\n\n## Alternatives Evaluated\n\nThe following existing events were evaluated:\n\n- **`OnPostConsumptionOnRemQtyToPostOnBeforeInsertConsumpEntry(ItemJnlLine, ProdOrderComp)`**: Fires at the correct location but has no `IsHandled` parameter. Adding `IsHandled` to an existing event is not allowed as you mentioned in - [Previous Event Request](https://github.com/microsoft/ALAppExtensions/issues/30228). This event cannot be used.\n\n- **`OnBeforeInsertConsumpEntry(ProdOrderComp, QtyBase, ModifyProdOrderComp, ItemJnlLine, TempSplitItemJnlLine)`**: Fires at the start of the `InsertConsumpEntry` local procedure. It has no `IsHandled` parameter so it cannot skip the procedure's logic. More importantly, it fires after the call to `InsertConsumpEntry` has already begun - at that point `ItemJnlLine.Quantity`, `ItemJnlLine.\"Quantity (Base)\"`, and related fields are about to be overwritten. There is no way to prevent these modifications from inside this event. This event cannot be used.\n\nNone of the existing events allow a subscriber to suppress the `InsertConsumpEntry` call for the remaining quantity before any of its side effects occur.\n\n---\n\n## Performance Considerations\n\nThe event fires once per execution of the remaining-quantity block inside `PostConsumption`. The proposal adds one Boolean variable and one conditional check. No measurable performance impact is expected.\n\n---\n\n## Data Sensitivity Review\n\nThe event exposes:\n\n- `var ItemJnlLine: Record \"Item Journal Line\"` - the journal line being posted; already in scope and already used by the existing event at the same location.\n- `var ProdOrderComp: Record \"Prod. Order Component\"` - the production order component; already in scope and already used by the existing event at the same location.\n- `var IsHandled: Boolean` - standard skip flag.\n\nNo sensitive data is introduced beyond what the existing event at this location already exposes.\n\n---\n\n## Multi-Extension Interaction\n\nThe standard `IsHandled` pattern applies. All subscribers run in sequence. If a subscriber sets `IsHandled := true`, the `InsertConsumpEntry` call is skipped, but subsequent subscribers still run unless they check `if IsHandled then exit`. When no subscriber is active, behaviour is unchanged.\n\n### Describe the request\n\n**Current code in `PostConsumption`:**\n\n```al\nOnPostConsumptionOnRemQtyToPostOnBeforeInsertConsumpEntry(ItemJnlLine, ProdOrderComp);\n\nif RemQtyToPost <> 0 then\n InsertConsumpEntry(\n ItemJnlLine, ProdOrderComp, ItemJnlLine.\"Prod. Order Comp. Line No.\",\n RemQtyToPost, false, ItemLedgEntryNo, TempSplitItemJnlLine, sender);\n```\n\n**Requested change:**\n\n```al\nOnPostConsumptionOnRemQtyToPostOnBeforeInsertConsumpEntry(ItemJnlLine, ProdOrderComp);\n\n//>> code change start\nIsHandled := false;\nOnPostConsumptionOnBeforeInsertRemainingConsumpEntry(ItemJnlLine, ProdOrderComp, IsHandled);\n//<< code change end\nif not IsHandled then\n if RemQtyToPost <> 0 then\n InsertConsumpEntry(\n ItemJnlLine, ProdOrderComp, ItemJnlLine.\"Prod. Order Comp. Line No.\",\n RemQtyToPost, false, ItemLedgEntryNo, TempSplitItemJnlLine, sender);\n```\n\n**New event declaration:**\n\n```al\n[IntegrationEvent(false, false)]\nlocal procedure OnPostConsumptionOnBeforeInsertRemainingConsumpEntry(var ItemJnlLine: Record \"Item Journal Line\"; var ProdOrderComp: Record \"Prod. Order Component\"; var IsHandled: Boolean)\nbegin\nend;\n```\n\n**Subscriber example (for illustration only):**\n\n```al\n[EventSubscriber(ObjectType::Codeunit, Codeunit::\"Mfg. Item Jnl.-Post Line\", 'OnPostConsumptionOnBeforeInsertRemainingConsumpEntry', '', false, false)]\nlocal procedure OnBeforeInsertRemainingConsumpEntryHandler(var ItemJnlLine: Record \"Item Journal Line\"; var ProdOrderComp: Record \"Prod. Order Component\"; var IsHandled: Boolean)\nbegin\n // Skip the remaining consumption entry for revaluation lines -\n // these represent cost corrections and must not produce a physical movement entry.\n if ItemJnlLine.\"Value Entry Type\" = ItemJnlLine.\"Value Entry Type\"::Revaluation then\n IsHandled := true;\nend;\n```","comments":"","current_labels":[],"expected":[{"text":"The triage decision sets labels_to_set to exactly these managed labels and no others: event-request, SCM.","level":"critical"},{"text":"The triage decision sets issue_state to 'open'.","level":"critical"},{"text":"The advisory comment posted to the requester reaches the same triage conclusion and provides guidance consistent with the following reference comment:\n\nAnalysis complete - approved for implementation.\n\nAdded event call in PostConsumption.\n\n```al\nIsHandled := false;\n OnPostConsumptionOnBeforeInsertRemainingConsumpEntry(ItemJnlLine, ProdOrderComp, IsHandled);\n if not IsHandled then\n if RemQtyToPost <> 0 then\n InsertConsumpEntry(\n ItemJnlLine, ProdOrderComp, ItemJnlLine.\"Prod. Order Comp. Line No.\", RemQtyToPost, false,\n ItemLedgEntryNo, TempSplitItemJnlLine, sender);\n \n ProdOrderCompModified := false;\n```\n\nAdded new integration event in OnPostConsumptionOnBeforeInsertRemainingConsumpEntry.\n\n```al\nbegin\n end;\n \n [IntegrationEvent(false, false)]\n local procedure OnPostConsumptionOnBeforeInsertRemainingConsumpEntry(var ItemJournalLine: Record \"Item Journal Line\"; var ProdOrderComponent: Record \"Prod. Order Component\"; var IsHandled: Boolean)\n begin\n end;\n\n [IntegrationEvent(false, false)]\n local procedure OnPostConsumptionOnBeforeCalcRemQtyToPostThisLine(var ProdOrderComp: Record \"Prod. Order Component\"; var ItemJnlLine: Record \"Item Journal Line\"; var TempHandlingSpecification: Record \"Tracking Specification\"; RemQtyToPost: Decimal; UseItemTrackingApplication: Boolean; LastLoop: Boolean; var IsHandled: Boolean)\n begin\n```","level":"expected"}]} +{"metadata":{},"repo":"microsoftInternal/NAV","instance_id":"microsoftInternal__NAV-Ext_Request_Triage-30026","base_commit":"97177510ef6bae4a2e01919b0b4cdc1e3bf1bb2f","created_at":"2026-05-11","environment_setup_version":"28.0","project_paths":["App/Layers/W1/BaseApp"],"title":"[W1][Page][403][Purchase Order Statistics] procedure VATLinesDrillDown as protected","description":"### Why do you need this change?\n\nWe need to extend the statistics and we want to use that method instead of duplicating it.\n\n### Describe the request\n\nChange the scope of `VATLinesDrillDown` method to `protected`.\n\n```al\nprotected procedure VATLinesDrillDown(...)\n```","comments":"","current_labels":[],"expected":[{"text":"The triage decision sets labels_to_set to exactly these managed labels and no others: request-for-external, SCM.","level":"critical"},{"text":"The triage decision sets issue_state to 'open'.","level":"critical"},{"text":"The advisory comment posted to the requester reaches the same triage conclusion and provides guidance consistent with the following reference comment:\n\n\u00c3\u017d\u00e2\u20ac\u0153\u00c3\u201a\u00c2\u00a3\u00c3\u0192\u00c2\u00a0 **Analysis complete - approved for implementation**\n\n---\n\n**Implementation:**\n\nChange the scope of `VATLinesDrillDown` on page 403 `Purchase Order Statistics` from `local` to `public`.\n\n**Current code:**\n\n```al\nlocal procedure VATLinesDrillDown(var VATLinesToDrillDown: Record \"VAT Amount Line\"; ThisTabAllowsVATEditing: Boolean)\nbegin\n Clear(VATLinesForm);\n VATLinesForm.SetTempVATAmountLine(VATLinesToDrillDown);\n VATLinesForm.InitGlobals(\n Rec.\"Currency Code\", AllowVATDifference, AllowVATDifference and ThisTabAllowsVATEditing,\n Rec.\"Prices Including VAT\", AllowInvDisc, Rec.\"VAT Base Discount %\");\n VATLinesForm.RunModal();\n VATLinesForm.GetTempVATAmountLine(VATLinesToDrillDown);\nend;\n```\n\n**Proposed change:**\n\n```al\nprocedure VATLinesDrillDown(var VATLinesToDrillDown: Record \"VAT Amount Line\"; ThisTabAllowsVATEditing: Boolean)\nbegin\n Clear(VATLinesForm);\n VATLinesForm.SetTempVATAmountLine(VATLinesToDrillDown);\n VATLinesForm.InitGlobals(\n Rec.\"Currency Code\", AllowVATDifference, AllowVATDifference and ThisTabAllowsVATEditing,\n Rec.\"Prices Including VAT\", AllowInvDisc, Rec.\"VAT Base Discount %\");\n VATLinesForm.RunModal();\n VATLinesForm.GetTempVATAmountLine(VATLinesToDrillDown);\nend;\n```\n\n---\n\n**File:** `PurchaseOrderStatistics.Page.al`","level":"expected"}]} +{"metadata": {}, "repo": "microsoftInternal/NAV", "instance_id": "microsoftInternal__NAV-Ext_Request_Triage-29988", "base_commit": "0e578f3948fbd9c3793c83827ee8c1e2f07d181d", "created_at": "2026-05-07", "environment_setup_version": "28.0", "project_paths": ["App/Layers/W1/BaseApp"], "title": "Suppress success messages in ReverseProdItemLedgerEntry and ReverseCapacityLedgerEntry", "description": "### Why do you need this change?\n\nWe call Codeunit 99000843 \"Undo Prod. Posting Mgmt.\" from an extension to reopen and reverse closed production orders without user interaction. `SetHideDialog(true)` suppresses the confirmation, but `ReverseProdItemLedgerEntry` and `ReverseCapacityLedgerEntry` still show the final success message, which prevents non-interactive processing.\n\n### Describe the request\n\nUse the existing `HideDialog` variable when showing the final success message in both procedures:\n\n```al\nif Processed and not HideDialog then\n Message(PostedSuccessfullyMsg);\n```", "comments": "", "current_labels": [], "expected": [{"text": "The triage decision sets labels_to_set to exactly these managed labels and no others: extensibility-enhancement, SCM.", "level": "critical"}, {"text": "The triage decision sets issue_state to 'open'.", "level": "critical"}, {"text": "The advisory comment posted to the requester reaches the same triage conclusion and provides guidance consistent with the following reference comment:\n\nand to suppress success message, we can add something like\n```al\n if Processed and not HideDialog then\n Message(PostedSuccessfullyMsg);\n```\nso same HideDialog variable is used", "level": "expected"}]} +{"metadata": {}, "repo": "microsoftInternal/NAV", "instance_id": "microsoftInternal__NAV-Ext_Request_Triage-29899", "base_commit": "ce3ee4e3ee1728dc5aa05fc495f0f9dbeea6a4ff", "created_at": "2026-04-07", "environment_setup_version": "28.0", "project_paths": ["App/Layers/W1/BaseApp"], "title": "[Event Request] OnQueryClosePage on page 7005 \"Price List Line Review\"", "description": "### Why do you need this change?\n\nWhen working with Price Lists (sales and purchase) and you change a line you cannot lease the page before accepting the changes. Makes sense to warn the user that the price change is not active.\n\nHowever, if another user opens the price/discount lines from an item/customer/vendor etc. and draft lines are shown, the page cannot be closed. I think the use case is assuming that the same user make the change - but the draft line may just as well be due to another user making changes to a price list. Having the user approve draft lines created by someone else is very confusing.\n\nAdding the same event we have on the sales/purchase price list to the page 7005 \"Price List Line Review\" will allow us work around the problem until better handling is added to the feature.\n\nThe equivalent events on the sales and purchase price list pages do not run for page 7005, while an event after the draft-line check would be too late to change the close result. The event runs once per page-close attempt with negligible performance impact and exposes only the current Price List Line already available on the page. If multiple extensions subscribe, the first subscriber setting `IsHandled := true` determines `Result`, and later subscribers must not overwrite it.\n\n### Describe the request\n\nOn **page 7005 \"Price List Line Review\"** the IsHandled pattern should be added to the **OnQueryClosePage** trigger.\n\n```\n IsHandled := false;\n OnQueryClosePageOnBeforeDraftLineCheck(Rec, Result, IsHandled);\n if IsHandled then\n exit(Result);\n```", "comments": "", "current_labels": [], "expected": [{"text": "The triage decision sets labels_to_set to exactly these managed labels and no others: event-request, SCM.", "level": "critical"}, {"text": "The triage decision sets issue_state to 'open'.", "level": "critical"}, {"text": "The advisory comment posted to the requester reaches the same triage conclusion and provides guidance consistent with the following reference comment:\n\n\u00c3\u017d\u00e2\u20ac\u0153\u00c3\u201a\u00c2\u00a3\u00c3\u0192\u00c2\u00a0 **Analysis complete - approved for implementation**\n\n---\n\n**Implementation:**\n\nAdd a new `IsHandled` integration event in the `OnQueryClosePage` trigger of `Price List Line Review` before the draft-line check, aligned with the existing pattern already used on the sales and purchase price list pages.\n\n**Location in `OnQueryClosePage()` trigger (around line 401):**\n\n```al\n trigger OnQueryClosePage(CloseAction: Action): Boolean;\n var\n PriceListManagement: Codeunit \"Price List Management\";\n IsHandled: Boolean;\n Result: Boolean;\n begin\n IsHandled := false;\n OnQueryClosePageOnBeforeDraftLineCheck(Rec, Result, IsHandled);\n if IsHandled then\n exit(Result);\n\n if HasDraftLines() then begin\n PriceListManagement.SendVerifyLinesNotification();\n exit(false);\n end;\n exit(true)\n end;\n```\n\n**Event Publisher (add at the end of the page with other events):**\n\n```al\n [IntegrationEvent(false, false)]\n local procedure OnQueryClosePageOnBeforeDraftLineCheck(var PriceListLine: Record \"Price List Line\"; var Result: Boolean; var IsHandled: Boolean)\n begin\n end;\n```\n\n---\n\n**File:** `PriceListLineReview.Page.al`", "level": "expected"}]} +{"metadata":{},"repo":"microsoftInternal/NAV","instance_id":"microsoftInternal__NAV-Ext_Request_Triage-30088","base_commit":"97177510ef6bae4a2e01919b0b4cdc1e3bf1bb2f","created_at":"2026-05-18","environment_setup_version":"28.0","project_paths":["App/Layers/W1/BaseApp"],"title":"Expose CheckWhseRequest() procedure from Report 7323 \"Create Invt Put-away/Pick/Mvmt\"","description":"### Why do you need this change?\n\nWe would like to customise Inventory Putaway creation process so would need to call local procedure `CheckWhseRequest()` from outside of \"Create Invt Put-away/Pick/Mvmt\" report.\n\n### Describe the request\n\nHi Microsoft BC Dev Team,\n\nCould you expose the `CheckWhseRequest()` in Report 7323 \"Create Invt Put-away/Pick/Mvmt\" to public? Currently it is set as a local procedure. \n\n```\n local procedure CheckWhseRequest(var WarehouseRequest: Record \"Warehouse Request\") SkipRecord: Boolean\n var\n SalesHeader: Record \"Sales Header\";\n TransferHeader: Record \"Transfer Header\";\n GetSrcDocOutbound: Codeunit \"Get Source Doc. Outbound\";\n IsHandled: Boolean;\n begin\n IsHandled := false;\n OnBeforeCheckWhseRequest(WarehouseRequest, ShowError, SkipRecord, IsHandled);\n if IsHandled then\n exit(SkipRecord);\n if WarehouseRequest.\"Document Status\" <> WarehouseRequest.\"Document Status\"::Released then\n SkipRecord := true\n else\n if (WarehouseRequest.Type = WarehouseRequest.Type::Outbound) and\n (WarehouseRequest.\"Shipping Advice\" = WarehouseRequest.\"Shipping Advice\"::Complete)\n then\n case WarehouseRequest.\"Source Type\" of\n Database::\"Sales Line\":\n if WarehouseRequest.\"Source Subtype\" = WarehouseRequest.\"Source Subtype\"::\"1\" then begin\n SkipRecord := not SalesHeader.Get(SalesHeader.\"Document Type\"::Order, WarehouseRequest.\"Source No.\");\n if not SkipRecord then\n SkipRecord := GetSrcDocOutbound.CheckSalesHeader(SalesHeader, ShowError);\n end;\n Database::\"Transfer Line\":\n begin\n SkipRecord := not TransferHeader.Get(WarehouseRequest.\"Source No.\");\n if not SkipRecord then\n SkipRecord := GetSrcDocOutbound.CheckTransferHeader(TransferHeader, ShowError);\n end;\n end;\n OnAfterCheckWhseRequest(WarehouseRequest, SkipRecord);\n end;\n```\n\nRegards,\nJason","comments":"","current_labels":[],"expected":[{"text":"The triage decision sets labels_to_set to exactly these managed labels and no others: request-for-external, SCM.","level":"critical"},{"text":"The triage decision sets issue_state to 'open'.","level":"critical"},{"text":"The advisory comment posted to the requester reaches the same triage conclusion and provides guidance consistent with the following reference comment:\n\n\u00c3\u017d\u00e2\u20ac\u0153\u00c3\u201a\u00c2\u00a3\u00c3\u0192\u00c2\u00a0 **Analysis complete - approved for implementation**\n\n---\n\n**Implementation:**\n\nRemove the `local` keyword from the `CheckWhseRequest` procedure in Report 7323 \"Create Invt Put-away/Pick/Mvmt\" to make it publicly accessible.\n\n**Current code:**\n\n```al\nlocal procedure CheckWhseRequest(var WarehouseRequest: Record \"Warehouse Request\") SkipRecord: Boolean\nvar\n SalesHeader: Record \"Sales Header\";\n TransferHeader: Record \"Transfer Header\";\n GetSrcDocOutbound: Codeunit \"Get Source Doc. Outbound\";\n IsHandled: Boolean;\nbegin\n ...\nend;\n```\n\n**Proposed change:**\n\n```al\nprocedure CheckWhseRequest(var WarehouseRequest: Record \"Warehouse Request\") SkipRecord: Boolean\nvar\n SalesHeader: Record \"Sales Header\";\n TransferHeader: Record \"Transfer Header\";\n GetSrcDocOutbound: Codeunit \"Get Source Doc. Outbound\";\n IsHandled: Boolean;\nbegin\n ...\nend;\n```\n\n---\n\n**File:** `CreateInvtPutawayPickMvmt.Report.al`","level":"expected"}]} +{"metadata": {}, "repo": "microsoftInternal/NAV", "instance_id": "microsoftInternal__NAV-Ext_Request_Triage-30003", "base_commit": "ff7d3501560ba4a5dd296b0409e7019a52e460be", "created_at": "2026-05-05", "environment_setup_version": "28.0", "project_paths": ["App/Layers/W1/BaseApp"], "title": "[Event Request] COD333 \"Req. Wksh.-Make Order\" - OnAfterCode - IncludeSender", "description": "### Why do you need this change?\n\nWe need to call an existing procedure of Codeunit 333 \"Req. Wksh.-Make Order\" from an `OnAfterCode` subscriber while preserving the codeunit's initialized global state.\n\n### Describe the request\n\nAppend an explicit `Sender: Codeunit \"Req. Wksh.-Make Order\"` parameter to the existing event and pass `this` when raising it:\n\n```al\nOnAfterCode(ReqLine, OrderLineCounter, OrderCounter, PrintPurchOrders, SuppressCommit, PurchOrderHeader, this);\n\n[IntegrationEvent(false, false)]\nlocal procedure OnAfterCode(var RequisitionLine: Record \"Requisition Line\"; OrderLineCounter: Integer; OrderCounter: Integer; PrintPurchOrders: Boolean; SuppressCommit: Boolean; var PurchOrderHeader: Record \"Purchase Header\"; Sender: Codeunit \"Req. Wksh.-Make Order\")\nbegin\nend;\n```", "comments": "", "current_labels": [], "expected": [{"text": "The triage decision sets labels_to_set to exactly these managed labels and no others: event-request, SCM.", "level": "critical"}, {"text": "The triage decision sets issue_state to 'open'.", "level": "critical"}, {"text": "The advisory comment posted to the requester reaches the same triage conclusion and provides guidance consistent with the following reference comment:\n\n\u2705 **Analysis complete - approved for implementation**\n\nUpdate the existing `OnAfterCode` event in Codeunit 333 \"Req. Wksh.-Make Order\" to append an explicit `Sender: Codeunit \"Req. Wksh.-Make Order\"` parameter and pass `this` when raising the event.", "level": "expected"}]} +{"metadata":{},"repo":"microsoftInternal/NAV","instance_id":"microsoftInternal__NAV-Ext_Request_Triage-30020","base_commit":"ff7d3501560ba4a5dd296b0409e7019a52e460be","created_at":"2026-05-14","environment_setup_version":"28.0","project_paths":["App/Layers/W1/BaseApp"],"title":"Extending Publisher in: \"Sales-Post\".OnAfterPostItemJnlLine","description":"### Why do you need this change?\n\nDear Support,\nCould You please modify a publisher in: \"Sales-Post\".OnAfterPostItemJnlLine?\nA customer wants us to use some customizations. There for we need the global var \"Warehouse Shipment Header\" for a customization. Since procedure PostItemJnlLine is global it can be called from anywhere.\n\n\n### Describe the request\n\n<<<< Original >>>>>\nOnAfterPostItemJnlLine(ItemJnlLine, SalesLine, SalesHeader, ItemJnlPostLine, WhseJnlPostLine, OriginalItemJnlLine, ItemShptEntryNo, IsATO, TempHandlingSpecification, TempATOTrackingSpecification, TempWhseJnlLine, ShouldPostItemJnlLine, WhseShip, WhseRcptHeader);\n\n[IntegrationEvent(true, false)]\n local procedure OnAfterPostItemJnlLine(var ItemJournalLine: Record \"Item Journal Line\"; SalesLine: Record \"Sales Line\"; SalesHeader: Record \"Sales Header\"; var ItemJnlPostLine: Codeunit \"Item Jnl.-Post Line\"; var WhseJnlPostLine: Codeunit \"Whse. Jnl.-Register Line\"; OriginalItemJnlLine: Record \"Item Journal Line\"; var ItemShptEntryNo: Integer; IsATO: Boolean; var TempHandlingSpecification: Record \"Tracking Specification\"; var TempATOTrackingSpecification: Record \"Tracking Specification\"; TempWarehouseJournalLine: Record \"Warehouse Journal Line\" temporary; ShouldPostItemJnlLine: Boolean; WhseShip: Boolean; WhseRcptHeader: Record \"Warehouse Receipt Header\")\n begin\n end;\n\n\n<<<<< Modification >>>>>\nOnAfterPostItemJnlLine(ItemJnlLine, SalesLine, SalesHeader, ItemJnlPostLine, WhseJnlPostLine, OriginalItemJnlLine, ItemShptEntryNo, IsATO, TempHandlingSpecification, TempATOTrackingSpecification, TempWhseJnlLine, ShouldPostItemJnlLine, WhseShip, WhseRcptHeader, WhseShptHeader);\n\n[IntegrationEvent(true, false)]\n local procedure OnAfterPostItemJnlLine(var ItemJournalLine: Record \"Item Journal Line\"; SalesLine: Record \"Sales Line\"; SalesHeader: Record \"Sales Header\"; var ItemJnlPostLine: Codeunit \"Item Jnl.-Post Line\"; var WhseJnlPostLine: Codeunit \"Whse. Jnl.-Register Line\"; OriginalItemJnlLine: Record \"Item Journal Line\"; var ItemShptEntryNo: Integer; IsATO: Boolean; var TempHandlingSpecification: Record \"Tracking Specification\"; var TempATOTrackingSpecification: Record \"Tracking Specification\"; TempWarehouseJournalLine: Record \"Warehouse Journal Line\" temporary; ShouldPostItemJnlLine: Boolean; WhseShip: Boolean; WhseRcptHeader: Record \"Warehouse Receipt Header\"; WhseShptHeader: Record \"Warehouse Shipment Header\")\n begin\n end;","comments":"### lhadhazi9940\n\nHello @[MSEmployee]\nWhen we could expect this? is it possible to release it in the bc 28.2 version?\nWe could be very happy, because it might be stopping a Go-Live with our customer.\n\nThanks for in advance!\nBR,\nLaszlo","current_labels":[],"expected":[{"text":"The triage decision sets labels_to_set to exactly these managed labels and no others: event-request, SCM.","level":"critical"},{"text":"The triage decision sets issue_state to 'open'.","level":"critical"},{"text":"The advisory comment posted to the requester reaches the same triage conclusion and provides guidance consistent with the following reference comment:\n\n\u00c3\u017d\u00e2\u20ac\u0153\u00c3\u201a\u00c2\u00a3\u00c3\u0192\u00c2\u00a0 **Analysis complete - approved for implementation**\n\n---\n\n**Implementation:**\n\nExtend the existing `OnAfterPostItemJnlLine` publisher by appending `WarehouseShipmentHeader: Record \"Warehouse Shipment Header\"` to the event call and the event signature.\n\n**Location in `PostItemJnlLine()` procedure (around line 1563 in W1 layer):**\n\n```al\n ItemShptEntryNo := ItemJnlLine.\"Item Shpt. Entry No.\";\n OnAfterPostItemJnlLine(ItemJnlLine, SalesLine, SalesHeader, ItemJnlPostLine, WhseJnlPostLine, OriginalItemJnlLine, ItemShptEntryNo, IsATO, TempHandlingSpecification, TempATOTrackingSpecification, TempWhseJnlLine, ShouldPostItemJnlLine, WhseShip, WhseRcptHeader, WarehouseShipmentHeader);\n\n exit(ItemShptEntryNo);\n```\n\n**Event Publisher (add at the end of the codeunit with other events):**\n\n```al\n[IntegrationEvent(true, false)]\nlocal procedure OnAfterPostItemJnlLine(var ItemJournalLine: Record \"Item Journal Line\"; SalesLine: Record \"Sales Line\"; SalesHeader: Record \"Sales Header\"; var ItemJnlPostLine: Codeunit \"Item Jnl.-Post Line\"; var WhseJnlPostLine: Codeunit \"Whse. Jnl.-Register Line\"; OriginalItemJnlLine: Record \"Item Journal Line\"; var ItemShptEntryNo: Integer; IsATO: Boolean; var TempHandlingSpecification: Record \"Tracking Specification\"; var TempATOTrackingSpecification: Record \"Tracking Specification\"; TempWarehouseJournalLine: Record \"Warehouse Journal Line\" temporary; ShouldPostItemJnlLine: Boolean; WhseShip: Boolean; WhseRcptHeader: Record \"Warehouse Receipt Header\"; WarehouseShipmentHeader: Record \"Warehouse Shipment Header\")\nbegin\nend;\n```\n\n---\n\n**File:** `SalesPost.Codeunit.al`","level":"expected"}]} +{"metadata":{},"repo":"microsoftInternal/NAV","instance_id":"microsoftInternal__NAV-Ext_Request_Triage-29847","base_commit":"4d5364fe9db538581afa951a8c10d8ea027a3561","created_at":"2026-03-20","environment_setup_version":"28.0","project_paths":["App/Layers/W1/BaseApp"],"title":"[Event Request] Codeunit 11758 \"Unreliable Payer Mgt. CZL\"","description":"### Why do you need this change?\n\nProblem statement:\nPlesease change ConfirmProcess and GetUnreliablePayerServiceSetup procedures to global. We are using SK legislation inside CZ database, because that doesn't exists and It is similar. We need skip standard checks for CZ legislation and use own checks for SK legislation that are similar to CZ. We have own function for check, but we use same functions as CZ legislation so we need these two procedures as global.\n\n### Describe the request\n\n```al\n//local procedure ConfirmProcess(ConfirmQuestion: Text)\nprocedure ConfirmProcess(ConfirmQuestion: Text)\n\n//local procedure GetUnreliablePayerServiceSetup()\nlocal procedure GetUnreliablePayerServiceSetup()\n```","comments":"","current_labels":[],"expected":[{"text":"The triage decision sets labels_to_set to exactly these managed labels and no others: request-for-external, SCM.","level":"critical"},{"text":"The triage decision sets issue_state to 'open'.","level":"critical"},{"text":"The advisory comment posted to the requester reaches the same triage conclusion and provides guidance consistent with the following reference comment:\n\n\u00c3\u017d\u00e2\u20ac\u0153\u00c3\u201a\u00c2\u00a3\u00c3\u0192\u00c2\u00a0 **Analysis complete - approved for implementation**\n\n---\n\n**Implementation:**\n\nChange the visibility of two procedures in Codeunit 11758 \"Unreliable Payer Mgt. CZL\" from local to public scope.\n\n**Current code:**\n\n```al\nlocal procedure ConfirmProcess(ConfirmQuestion: Text)\nvar\n ConfirmManagement: Codeunit \"Confirm Management\";\n IsHandled: Boolean;\nbegin\n OnBeforeConfirmProcess(ConfirmQuestion, IsHandled);\n if IsHandled then\n exit;\n if not IsConfirmDialogAllowed() then\n exit;\n if not ConfirmManagement.GetResponse(ConfirmQuestion, false) then\n Error('');\nend;\n\nlocal procedure GetUnreliablePayerServiceSetup()\nbegin\n if UnreliablePayerServiceSetupRead then\n exit;\n if not UnrelPayerServiceSetupCZL.Get() then begin\n UnrelPayerServiceSetupCZL.Init();\n SetDefaultUnreliablePayerServiceURL(UnrelPayerServiceSetupCZL);\n UnrelPayerServiceSetupCZL.Enabled := false;\n OnGetUnreliablePayerServiceSetupOnBeforeInsertUnrelPayerServiceSetupCZL(UnrelPayerServiceSetupCZL);\n UnrelPayerServiceSetupCZL.Insert();\n end;\n CompanyInformation.Get();\n UnreliablePayerServiceSetupRead := true;\nend;\n```\n\n**Proposed change:**\n\n```al\nprocedure ConfirmProcess(ConfirmQuestion: Text)\nvar\n ConfirmManagement: Codeunit \"Confirm Management\";\n IsHandled: Boolean;\nbegin\n OnBeforeConfirmProcess(ConfirmQuestion, IsHandled);\n if IsHandled then\n exit;\n if not IsConfirmDialogAllowed() then\n exit;\n if not ConfirmManagement.GetResponse(ConfirmQuestion, false) then\n Error('');\nend;\n\nprocedure GetUnreliablePayerServiceSetup()\nbegin\n if UnreliablePayerServiceSetupRead then\n exit;\n if not UnrelPayerServiceSetupCZL.Get() then begin\n UnrelPayerServiceSetupCZL.Init();\n SetDefaultUnreliablePayerServiceURL(UnrelPayerServiceSetupCZL);\n UnrelPayerServiceSetupCZL.Enabled := false;\n OnGetUnreliablePayerServiceSetupOnBeforeInsertUnrelPayerServiceSetupCZL(UnrelPayerServiceSetupCZL);\n UnrelPayerServiceSetupCZL.Insert();\n end;\n CompanyInformation.Get();\n UnreliablePayerServiceSetupRead := true;\nend;\n```\n\n---\n\n**File:** `UnreliablePayerMgtCZL.Codeunit.al`","level":"expected"}]} +{"metadata":{},"repo":"microsoftInternal/NAV","instance_id":"microsoftInternal__NAV-Ext_Request_Triage-29802","base_commit":"4d5364fe9db538581afa951a8c10d8ea027a3561","created_at":"2026-03-11","environment_setup_version":"28.0","project_paths":["App/Layers/W1/BaseApp"],"title":"[Protected Var Request] Table 222 \"Ship-to Address\"","description":"### Why do you need this change?\n\nPlease set global variable \"PostCode\" as protected. We need work with in our tablextension.\n\n### Describe the request\n\n```\nprotected var PostCode: Record \"Post Code\";\n```","comments":"### [bot]\n\nHi @[author],\n\nThanks for submitting this extensibility request. To help us process it efficiently, please update the issue to include the required information.\n\n\u00c3\u00a2\u00e2\u20ac\u00b0\u00c2\u00a1\u00c3\u2020\u00e2\u20ac\u2122\u00c3\u0192\u00c2\u00b4\u00c3\u0192\u00c5\u201c [Extensibility Guidelines](https://learn.microsoft.com/en-us/dynamics365/business-central/dev-itpro/developer/devenv-contribute-extensibility)\n\n**Missing Information:**\n\n- **Meaningful Justification**: The statement \"We need work with in our tablextension\" is too generic. Please explain specifically WHAT you need to do with the PostCode variable and WHY. For example:\n - What functionality are you implementing?\n - What specific operations do you need to perform with PostCode (filter, validate, access specific fields)?\n - What business or technical scenario requires this access?\n\n- **Usage Scenario**: Please describe HOW you will use the protected PostCode variable:\n - From which context will you access it (which table extension, which triggers/procedures)?\n - What specific operations will you perform?\n - What is your implementation approach?\n\nPlease update the issue with the missing details. We'll automatically re-analyze once updated.\n\n### Requester\n\nHello @[MSEmployee],\ncustomer use Post Code table for define their Service zone. This service zone is tablerelation to location. Post Code table fill region, city, post code and for us fill Location Code also. This is reason why we need it as protected var because we need add new function to fill location code. PostCode variable is filled by lookup and we need this record for OnAfterValidate triggers.\n\n### Requester\n\nHello @[MSEmployee],\ndo you need more information or it is ok for you?","current_labels":[],"expected":[{"text":"The triage decision sets labels_to_set to exactly these managed labels and no others: request-for-external, SCM.","level":"critical"},{"text":"The triage decision sets issue_state to 'open'.","level":"critical"},{"text":"The advisory comment posted to the requester reaches the same triage conclusion and provides guidance consistent with the following reference comment:\n\n\u00c3\u017d\u00e2\u20ac\u0153\u00c3\u201a\u00c2\u00a3\u00c3\u0192\u00c2\u00a0 **Analysis complete - approved for implementation**\n\n---\n\n**Implementation:**\n\nMove the PostCode variable from the var section to a new protected var section in Table 222 \"Ship-to Address\".\n\n**Current code:**\n\n```al\nvar\n Cust: Record Customer;\n PostCode: Record \"Post Code\";\n AltCustVATRegFacade: Codeunit \"Alt. Cust. VAT. Reg. Facade\";\n```\n\n**Proposed change:**\n\n```al\nvar\n Cust: Record Customer;\n AltCustVATRegFacade: Codeunit \"Alt. Cust. VAT. Reg. Facade\";\n\nprotected var\n PostCode: Record \"Post Code\";\n```\n\n---\n\n**File:** `ShiptoAddress.Table.al`","level":"expected"}]} +{"metadata":{},"repo":"microsoftInternal/NAV","instance_id":"microsoftInternal__NAV-Ext_Request_Triage-29888","base_commit":"ce3ee4e3ee1728dc5aa05fc495f0f9dbeea6a4ff","created_at":"2026-04-08","environment_setup_version":"28.0","project_paths":["App/Layers/W1/BaseApp"],"title":"page 2900 \"Demand Forecast Variant Matrix\" add a new Event OnBeforeLoadData in the procedure LoadData","description":"### Why do you need this change?\n\n```\nlocal procedure LoadData(ItemFilter: Text; LocationFilter: Text; UseLocation: Boolean; UseVariant: Boolean; VariantFilter: Text)\n var\n Item: Record Item;\n SelectionFilterMgt: Codeunit SelectionFilterManagement;\n ItemWithVariantsAndLocationsQuery: Query \"Item With Variants & Locations\";\n ItemWithVariantsQuery: Query \"Item With Variants\";\n ItemWithLocationsQuery: Query \"Item With Locations\";\n EntryNo: Integer;\n IsHandled: Boolean;\n begin\n Rec.DeleteAll();\n EntryNo := 0;\n ShowVariants := UseVariant;\n ShowLocations := `UseLocation;`\n Item.SetView(ItemFilter);\n if Item.IsEmpty() then\n exit;\n\n //New Event ++\n OnBeforeLoadData(Rec, Item, ItemFilter, LocationFilter, UseLocation, UseVariant, VariantFilter, MaxRowsToLoadVal, IsHandled);\n if IsHandled then\n exit;\n //New Event --\n\n case GetQueryForMatrix(UseVariant, UseLocation) of\n Database::Item:\n begin\n Item.SetRange(Type, Item.Type::Inventory);\n if Item.FindSet() then\n repeat\n if not IncrementEntryNo(EntryNo) then\n break;\n Rec.Init();\n Rec.\"Entry No.\" := EntryNo;\n Rec.\"No.\" := Item.\"No.\";\n Rec.Description := Item.Description;\n Rec.Insert();\n until Item.Next() = 0;\n end;\n Query::\"Item With Variants\":\n begin\n ItemWithVariantsQuery.SetFilter(No_, SelectionFilterMgt.GetSelectionFilterForItem(Item));\n ItemWithVariantsQuery.SetFilter(VariantCode, VariantFilter);\n ItemWithVariantsQuery.SetRange(Type, \"Item Type\"::Inventory);\n\n if ItemWithVariantsQuery.Open() then\n while ItemWithVariantsQuery.Read() do begin\n if not IncrementEntryNo(EntryNo) then\n break;\n Rec.Init();\n Rec.\"Entry No.\" := EntryNo;\n Rec.\"No.\" := ItemWithVariantsQuery.No_;\n Rec.Description := ItemWithVariantsQuery.Description;\n Rec.\"Variant Code\" := ItemWithVariantsQuery.VariantCode;\n Rec.\"Variant Filter\" := ItemWithVariantsQuery.VariantCode;\n Rec.Insert();\n end;\n ItemWithVariantsQuery.Close();\n end;\n Query::\"Item With Locations\":\n begin\n ItemWithLocationsQuery.SetFilter(No_, SelectionFilterMgt.GetSelectionFilterForItem(Item));\n ItemWithLocationsQuery.SetFilter(LocationCode, LocationFilter);\n ItemWithLocationsQuery.SetRange(Type, \"Item Type\"::Inventory);\n ItemWithLocationsQuery.SetRange(Use_As_In_Transit, false);\n if ItemWithLocationsQuery.Open() then\n while ItemWithLocationsQuery.Read() do begin\n if not IncrementEntryNo(EntryNo) then\n break;\n Rec.Init();\n Rec.\"Entry No.\" := EntryNo;\n Rec.\"No.\" := ItemWithLocationsQuery.No_;\n Rec.Description := ItemWithLocationsQuery.Description;\n Rec.\"Location Code\" := ItemWithLocationsQuery.LocationCode;\n Rec.\"Location Filter\" := ItemWithLocationsQuery.LocationCode;\n Rec.Insert();\n end;\n ItemWithLocationsQuery.Close();\n end;\n Query::\"Item With Variants & Locations\":\n begin\n ItemWithVariantsAndLocationsQuery.SetFilter(No_, SelectionFilterMgt.GetSelectionFilterForItem(Item));\n ItemWithVariantsAndLocationsQuery.SetFilter(LocationCode, LocationFilter);\n ItemWithVariantsAndLocationsQuery.SetFilter(VariantCode, VariantFilter);\n ItemWithVariantsAndLocationsQuery.SetRange(Type, \"Item Type\"::Inventory);\n ItemWithVariantsAndLocationsQuery.SetRange(Use_As_In_Transit, false);\n if ItemWithVariantsAndLocationsQuery.Open() then\n while ItemWithVariantsAndLocationsQuery.Read() do begin\n if not IncrementEntryNo(EntryNo) then\n break;\n Rec.Init();\n Rec.\"Entry No.\" := EntryNo;\n Rec.\"No.\" := ItemWithVariantsAndLocationsQuery.No_;\n Rec.Description := ItemWithVariantsAndLocationsQuery.Description;\n Rec.\"Variant Code\" := ItemWithVariantsAndLocationsQuery.VariantCode;\n Rec.\"Variant Filter\" := ItemWithVariantsAndLocationsQuery.VariantCode;\n Rec.\"Location Code\" := ItemWithVariantsAndLocationsQuery.LocationCode;\n Rec.\"Location Filter\" := ItemWithVariantsAndLocationsQuery.LocationCode;\n Rec.Insert();\n end;\n ItemWithVariantsAndLocationsQuery.Close();\n end;\n end;\n\n //Point to the first row of the matrix\n OnLoadDataOnBeforeRecFindFirst(Rec, ItemFilter, LocationFilter, UseLocation, UseVariant, VariantFilter);\n if not Rec.IsEmpty() then\n Rec.FindFirst();\n end;\n\n //New Event ++\n [IntegrationEvent(false, false)]\n local procedure OnBeforeLoadData(var ForecastItemVariantLoc: Record \"Forecast Item Variant Loc\"; var Item: Record Item; ItemFilter: Text; LocationFilter: Text; UseLocation: Boolean; UseVariant: Boolean; VariantFilter: Text; MaxRowsToLoadVal: Integer; var IsHandled: Boolean)\n begin\n end;\n //New Event --\n\n\n\n\n\n\n\n```\n\n### Describe the request\n\n Page 2900 \"Demand Forecast Variant Matrix\" add a new Event OnBeforeLoadData in the procedure LoadData","comments":"### [bot]\n\nHi @[author],\n\nThanks for submitting this extensibility request. To help us process it efficiently, please update the issue to include the required information.\n\n\u00c3\u00a2\u00e2\u20ac\u00b0\u00c2\u00a1\u00c3\u2020\u00e2\u20ac\u2122\u00c3\u0192\u00c2\u00b4\u00c3\u0192\u00c5\u201c [Extensibility Guidelines](https://learn.microsoft.com/en-us/dynamics365/business-central/dev-itpro/developer/devenv-contribute-extensibility)\n\n**Missing Information:**\n\n- **Current limitation or problem**: Please describe the actual scenario in narrative form, including what you are trying to achieve in page 2900 \"Demand Forecast Variant Matrix\" and what cannot be done today without this event.\n- **Meaningful business or technical justification**: Please explain why `OnBeforeLoadData` is needed and what extension logic you need to run there.\n- **Alternatives evaluated**: Please list any existing events or other extensibility patterns you considered and why they are insufficient.\n- **Justification for `IsHandled`**: Please explain why bypass capability is required instead of a regular event, and what standard logic must be skipped or replaced.\n- **Performance considerations**: Please describe how often this code path runs and any expected performance impact.\n- **Data sensitivity review**: Please confirm whether exposing the involved data to subscribers has any security or privacy implications.\n- **Multi-extension interaction**: Please describe possible conflicts if multiple extensions subscribe and how that risk should be handled.\n\nPlease update the issue with the missing details. We'll automatically re-analyze once updated.\n\n### Requester\n\n**Current limitation or problem:** \nWe developed a new functionality in Business Central named Assembly BOM Version and want to incorporate it into the Demand Forecast process. To support this, a new fields was added to the Item and SKU tables, and this field should be shown on the Demand Forecast Matrix, along with Location and Variant.\n\n**Meaningful business or technical justification:**\nWe created new queries based on SKU and extended them with the newly added fields. The OnBeforeLoadData event is required to switch the data source from the standard query to the new custom query object before the demand forecast data is loaded. In this event, the extension logic sets up the query, applies any required filters (such as Item, SKU, Location, or Variant), and ensures the new field is included so that the Demand Forecast Matrix are populated using the updated query structure.\n\n**Alternatives Evaluated and Why They Are Insufficient**\nOnLoadDataOnBeforeRecFindFirst event executes after data loading.\n\n**Justification for IsHandled:**\nThe IsHandled bypass capability is required because the existing standard logic loads demand forecast data using standard queries and filtering, which does not support our custom requirements. We need to completely skip this standard logic and replace it with custom queries and a custom filtering process to ensure the newly added fields are retrieved and displayed. By setting IsHandled = true, we prevent the standard data-loading mechanism from executing and instead use our extension logic to load Demand Forecast Matrix from the custom queries.\n\n**Performance considerations:**\nEliminates duplicate loading.\n\n**No Security/Privacy Implications:**\nEvent exposes same data already available through page 2900.\nSubscribers receive filtered subset of Item, Item Variant, Location data.\nAll data is already accessible to users with page 2900 permissions.\n\n**Conflict Prevention Strategy:**\nIsHandled Checking: Extensions should check if IsHandled is already true before processing.\nExecution Order: First subscriber setting IsHandled=true takes precedence.\nEvent Publisher Priority: SilverLeaf extension sets IsHandled only when Assembly BOM Version forecasting is active returns true.\nFallback Behavior: If extension encounters error, leaves IsHandled=false to allow standard processing.","current_labels":[],"expected":[{"text":"The triage decision sets labels_to_set to exactly these managed labels and no others: event-request, SCM.","level":"critical"},{"text":"The triage decision sets issue_state to 'open'.","level":"critical"},{"text":"The advisory comment posted to the requester reaches the same triage conclusion and provides guidance consistent with the following reference comment:\n\n\u00c3\u017d\u00e2\u20ac\u0153\u00c3\u201a\u00c2\u00a3\u00c3\u0192\u00c2\u00a0 **Analysis complete - approved for implementation**\n\n---\n\n**Implementation:**\n\nAdd a new IsHandled integration event at the beginning of `LoadData()` so extensions can replace the standard matrix data-loading logic and populate temporary `Forecast Item Variant Loc` rows from custom query logic when needed.\n\n**Location in `LoadData()` procedure (before the `case GetQueryForMatrix(UseVariant, UseLocation) of` block):**\n\n```al\nlocal procedure LoadData(ItemFilter: Text; LocationFilter: Text; UseLocation: Boolean; UseVariant: Boolean; VariantFilter: Text)\nvar\n Item: Record Item;\n SelectionFilterMgt: Codeunit SelectionFilterManagement;\n ItemWithVariantsAndLocationsQuery: Query \"Item With Variants & Locations\";\n ItemWithVariantsQuery: Query \"Item With Variants\";\n ItemWithLocationsQuery: Query \"Item With Locations\";\n EntryNo: Integer;\n IsHandled: Boolean;\nbegin\n Rec.DeleteAll();\n EntryNo := 0;\n ShowVariants := UseVariant;\n ShowLocations := UseLocation;\n Item.SetView(ItemFilter);\n if Item.IsEmpty() then\n exit;\n\n IsHandled := false;\n OnBeforeLoadData(Rec, Item, ItemFilter, LocationFilter, UseLocation, UseVariant, VariantFilter, MaxRowsToLoadVal, IsHandled);\n if IsHandled then\n exit;\n\n case GetQueryForMatrix(UseVariant, UseLocation) of\n```\n\n**Event Publisher (add at the end of the codeunit with other events):**\n\n```al\n[IntegrationEvent(false, false)]\nlocal procedure OnBeforeLoadData(var ForecastItemVariantLoc: Record \"Forecast Item Variant Loc\"; var Item: Record Item; ItemFilter: Text; LocationFilter: Text; UseLocation: Boolean; UseVariant: Boolean; VariantFilter: Text; MaxRowsToLoad: Integer; var IsHandled: Boolean)\nbegin\nend;\n```\n\n---\n\n**File:** `DemandForecastVariantMatrix.Page.al`","level":"expected"}]} +{"metadata": {}, "repo": "microsoftInternal/NAV", "instance_id": "microsoftInternal__NAV-Ext_Request_Triage-29832", "base_commit": "6b83b651f8f2ff4e698ae62ed9384e09f2c0d3f0", "created_at": "2026-03-16", "environment_setup_version": "28.0", "project_paths": ["App/Layers/W1/BaseApp"], "title": "[Event Request] Codeunit 5887 \"Phys. Invt.-Calc. Qty. All\".OnRun", "description": "### Why do you need this change?\n\nWe need skip standard strmenu, bucause we use this codeunit during API actions. It means we have to skip all users interactive parts. This event allow us skip selecetion menu and provide default selection set in setups or provided by API.\n\nNew event doesn't skip another events so this not change behavior for another extensions. \n\n### Describe the request\n\n```al\n\n trigger OnRun()\n var\n PhysInvtOrderHeader: Record \"Phys. Invt. Order Header\";\n PhysInvtOrderLine: Record \"Phys. Invt. Order Line\";\n Selection: Integer;\n //-----------------------------OnRunOnBeforeSelectSelection:BEGIN\n IsHandled: Boolean;\n //-----------------------------OnRunOnBeforeSelectSelection:END\n begin\n PhysInvtOrderHeader.Copy(Rec);\n\n //-----------------------------OnRunOnBeforeSelectSelection:BEGIN\n IsHandled := false;\n OnRunOnBeforeSelectSelection(Selection, IsHandled);\n if not IsHandled then\n //-----------------------------OnRunOnBeforeSelectSelection:END\n Selection := StrMenu(SelectionQst, 1);\n if Selection = 0 then\n exit;\n\n PhysInvtOrderLine.Reset();\n PhysInvtOrderLine.SetRange(\"Document No.\", PhysInvtOrderHeader.\"No.\");\n if PhysInvtOrderLine.Find('-') then\n repeat\n if (Selection = 1) or\n ((Selection = 2) and not PhysInvtOrderLine.\"Qty. Exp. Calculated\")\n then\n if not PhysInvtOrderLine.EmptyLine() then begin\n PhysInvtOrderLine.TestField(\"Item No.\");\n PhysInvtOrderLine.CalcQtyAndTrackLinesExpected();\n PhysInvtOrderLine.Modify();\n end;\n until PhysInvtOrderLine.Next() = 0;\n\n Rec := PhysInvtOrderHeader;\n end;\n\n var\n SelectionQst: Label 'All Order Lines,Only Not Calculated Lines';\n\n //-----------------------------OnRunOnBeforeSelectSelection:BEGIN\n [IntegrationEvent(false, false)]\n local procedure OnRunOnBeforeSelectSelection(var Selection: Integer; var IsHandled: Boolean)\n begin\n end;\n //-----------------------------OnRunOnBeforeSelectSelection:END\n```", "comments": "### [bot]\n\nHi @[author],\n\nThanks for submitting this extensibility request. To help us process it efficiently, please update the issue to include the required information.\n\n\u00c3\u00a2\u00e2\u20ac\u00b0\u00c2\u00a1\u00c3\u2020\u00e2\u20ac\u2122\u00c3\u0192\u00c2\u00b4\u00c3\u0192\u00c5\u201c [Extensibility Guidelines](https://learn.microsoft.com/en-us/dynamics365/business-central/dev-itpro/developer/devenv-contribute-extensibility)\n\n**Missing Information:**\n\n- **Alternatives Evaluated**: Please explain which existing events or patterns you tried and why they are insufficient for your scenario.\n\n- **Justification for IsHandled**: The current justification \"need to skip StrMenu during API actions\" needs more detail. Please provide:\n - Specific technical reason why a standard event is insufficient\n - Concrete business logic explaining why bypassing StrMenu is essential in API context\n - Exact scenario where bypass is necessary\n - Why alternative approaches (redesign, contribution) won't work\n \n Example of good justification: \"We must bypass the StrMenu because our API integration automates physical inventory calculations without user interaction. The StrMenu blocks API execution waiting for user input that will never come in automated scenarios. A standard event firing after the StrMenu selection won't work because the code execution is already blocked waiting for user response. We need to programmatically set the Selection value (1 for all lines, 2 for uncalculated lines) based on API request parameters before the StrMenu is called.\"\n\n- **Performance Considerations**: What is the expected execution frequency of this event? How many times will it be called during typical operations (per API call, per batch)? What is the potential performance impact?\n\n- **Data Sensitivity Review**: Please confirm that no sensitive data is being exposed through this event parameters, or provide rationale if exposure is necessary.\n\n- **Multi-Extension Interaction**: What are the risks if multiple extensions subscribe to this event with IsHandled? How should conflicts be mitigated?\n\nPlease update the issue with the missing details. We'll automatically re-analyze once updated.\n\n### Requester\n\nHello @[MSEmployee],\n\n**Justification for IsHandled**: We must bypass the StrMenu because our API integration automates physical inventory calculations without user interaction. The StrMenu blocks API execution waiting for user input that will never come in automated scenarios. A standard event firing after the StrMenu selection won't work because the code execution is already blocked waiting for user response. We need to programmatically set the Selection value (1 for all lines, 2 for uncalculated lines) based on API request parameters before the StrMenu is called.\n\n**Performance Considerations**: 100/per day\n\n**Data Sensitivity Review**: There are no record data so what?????\n\n**Multi-Extension Interaction** can change strmenu.\n\nAn event after `StrMenu` cannot be used because API execution is already blocked waiting for user input, while a regular event cannot prevent the menu from opening. The codeunit is called approximately 100 times per day, and the subscriber performs only a lightweight selection, so the performance impact is negligible. The event exposes only `Selection` and `IsHandled`, with no record or sensitive data. If multiple extensions subscribe, the first subscriber setting `IsHandled := true` controls the selection, and later subscribers must not overwrite it.", "current_labels": [], "expected": [{"text": "The triage decision sets labels_to_set to exactly these managed labels and no others: event-request, SCM.", "level": "critical"}, {"text": "The triage decision sets issue_state to 'open'.", "level": "critical"}, {"text": "The advisory comment posted to the requester reaches the same triage conclusion and provides guidance consistent with the following reference comment:\n\n\u00c3\u017d\u00e2\u20ac\u0153\u00c3\u201a\u00c2\u00a3\u00c3\u0192\u00c2\u00a0 **Analysis complete - approved for implementation**\n\n---\n\n**Implementation:**\n\nAdd a new IntegrationEvent `OnRunOnBeforeSelectSelection` with IsHandled parameter in the OnRun trigger of Codeunit 5887 \"Phys. Invt.-Calc. Qty. All\" before the StrMenu call (around line 37).\n\n**Location in OnRun trigger (around line 37):**\n\n```al\ntrigger OnRun()\nvar\n PhysInvtOrderHeader: Record \"Phys. Invt. Order Header\";\n PhysInvtOrderLine: Record \"Phys. Invt. Order Line\";\n Selection: Integer;\n IsHandled: Boolean;\nbegin\n PhysInvtOrderHeader.Copy(Rec);\n\n IsHandled := false;\n OnRunOnBeforeSelectSelection(Selection, IsHandled); // <-- New event\n \n if not IsHandled then begin\n Selection := StrMenu(SelectionQst, 1);\n if Selection = 0 then\n exit;\n end;\n\n PhysInvtOrderLine.Reset();\n PhysInvtOrderLine.SetRange(\"Document No.\", PhysInvtOrderHeader.\"No.\");\n if PhysInvtOrderLine.Find('-') then\n repeat\n if (Selection = 1) or\n ((Selection = 2) and not PhysInvtOrderLine.\"Qty. Exp. Calculated\")\n then\n if not PhysInvtOrderLine.EmptyLine() then begin\n PhysInvtOrderLine.TestField(\"Item No.\");\n PhysInvtOrderLine.CalcQtyAndTrackLinesExpected();\n PhysInvtOrderLine.Modify();\n end;\n until PhysInvtOrderLine.Next() = 0;\n\n Rec := PhysInvtOrderHeader;\nend;\n```\n\n**Event Publisher (add at the end of the codeunit with other events):**\n\n```al\n[IntegrationEvent(false, false)]\nlocal procedure OnRunOnBeforeSelectSelection(var Selection: Integer; var IsHandled: Boolean)\nbegin\nend;\n```\n\n---\n\n**File:** `PhysInvtCalcQtyAll.Codeunit.al`", "level": "expected"}]} +{"metadata":{},"repo":"microsoftInternal/NAV","instance_id":"microsoftInternal__NAV-Ext_Request_Triage-29836","base_commit":"b390db3ceb21e288e8a8774b233b7b1d2d398edf","created_at":"2026-01-01","environment_setup_version":"28.0","project_paths":["App/Layers/W1/BaseApp"],"title":"Codeunit 99000890 \"Mfg. Purch.-Post\" legacy event OnAfterPostItemJnlLineCopyProdOrder no more fired","description":"### Why do you need this change?\n\nRefactor of code moved from \"Purch-Post\" codeunit into \"Mfg. Purch.-Post\" do not throw the legacy event OnAfterPostItemJnlLineCopyProdOrder anymore.\n\nIn the PostItemJnlLineCopyProdOrder procedure the new event is called two times insted of firing the old one.\n\n\"Image\"\n\nPlease replace the code with:\n\n #if not CLEAN27\n PurchPost.RunOnAfterPostItemJnlLineCopyProdOrder(ItemJnlLine, PurchLine, PurchRcptHeader, QtyToBeReceived, SuppressCommit, QtyToBeInvoiced);\n #endif\n\n\n\n### Describe the request\n\nBackward compatibility of \"Purch.-Post\".OnAfterPostItemJnlLineCopyProdOrder(...) event is broken\nPlese fix either on 27 and 28 version.","comments":"","current_labels":[],"expected":[{"text":"The triage decision sets no labels (labels_to_set is empty).","level":"critical"},{"text":"The triage decision sets issue_state to 'closed'.","level":"critical"},{"text":"The advisory comment posted to the requester rejects the request and explains that the proposed change is inside a `#if not CLEAN27` compatibility block, where new extensibility changes must not be made.","level":"expected"}]} +{"metadata": {}, "repo": "microsoftInternal/NAV", "instance_id": "microsoftInternal__NAV-Ext_Request_Triage-30254", "base_commit": "f7e26eba1bf2a4a87f8104373ca7519f792467f8", "created_at": "2026-06-23", "environment_setup_version": "28.0", "project_paths": ["App/Layers/W1/BaseApp"], "title": "[Event Request] codeunit 5817 \"Undo Posting Management\" - CollectItemLedgEntries procedure", "description": "### Why do you need this change?\n\nDear support, in codeunit **5817 \"Undo Posting Management\"** we need an event to handle the `CollectItemLedgEntries` function, since that function does not provide one; one of our clients had an implementation for this in NAV and we need to replicate it in BC.\n\n**Alternatives evaluated**\n\nThe existing extensibility points are not sufficient because the customization must prevent the standard item ledger entry collection logic from running before `CheckMissingItemLedgers` is called. `OnBeforeCheckMissingItemLedgers` is also insufficient because it runs only in the `EntryRef = 0` branch after temporary entries have been cleared; the customization must also bypass the `EntryRef <> 0` branch and preserve the existing temporary entries.\n\nThe requirement is to skip the collection when the related item is marked as `Without Inventory`. Without a pre-event, the standard logic may attempt to collect item ledger entries that are not expected to exist and raise an error.\n\n**Performance / execution context for IsHandled**\n\nThe event is raised once per execution of `CollectItemLedgEntries`. The subscriber only performs a small lookup on the source document line and related item to verify whether the item is marked as `Without Inventory`.\n\nThe expected performance impact is negligible.\n\n**Sensitive data assessment**\n\nThe event does not expose any additional sensitive or private data. It only provides parameters that are already available within the procedure execution context.\n\n**Multi-extension interaction / conflict risk**\n\nAs with any `IsHandled` event, conflicts are possible if multiple extensions attempt to override the same behavior.\n\nIn this scenario, the subscriber sets `IsHandled := true` only when the related item is marked as `Without Inventory`. This limits the risk of conflicts and ensures that the standard behavior remains unchanged for all other cases.\n\n\n### Describe the request\n\n\t[IntegrationEvent(false, false)]\n\tlocal procedure OnBeforeCollectItemLedgEntries(var TempItemLedgEntry: Record \"Item Ledger Entry\" temporary; SourceType: Integer; DocumentNo: Code[20]; LineNo: Integer; BaseQty: Decimal; EntryRef: Integer; var IsHandled: Boolean)\n\tbegin\n\tend;\n\n[Changes between **]\n\n\tprocedure CollectItemLedgEntries(var TempItemLedgEntry: Record \"Item Ledger Entry\" temporary; SourceType: Integer; DocumentNo: Code[20]; LineNo: Integer; BaseQty: Decimal; EntryRef: Integer)\n var\n ItemLedgEntry: Record \"Item Ledger Entry\";\n\t\t** IsHandled: boolean; **\n begin\n\t\t** \n\t\tIsHandled := false;\n\t\tOnBeforeCollectItemLedgEntries(TempItemLedgEntry, SourceType, DocumentNo, LineNo, BaseQty, EntryRef, IsHandled);\n\t\tif IsHandled then\n\t\t\texit;\n\t\t**\n TempItemLedgEntry.Reset();\n if not TempItemLedgEntry.IsEmpty() then\n TempItemLedgEntry.DeleteAll();\n if EntryRef <> 0 then begin\n ItemLedgEntry.Get(EntryRef); // Assertion: will fail if no entry exists.\n TempItemLedgEntry := ItemLedgEntry;\n TempItemLedgEntry.Insert();\n end else begin\n if ShouldRevertBaseQtySign(SourceType) then\n BaseQty := BaseQty * -1;\n CheckMissingItemLedgers(TempItemLedgEntry, SourceType, DocumentNo, LineNo, BaseQty);\n end;\n end;", "comments": "### [bot]\n\nHi @[author],\n\nThank you for your extensibility request. To help us process it efficiently, please update the issue to include the required information.\n\n\u00c3\u00a2\u00e2\u20ac\u00b0\u00c2\u00a1\u00c3\u2020\u00e2\u20ac\u2122\u00c3\u0192\u00c2\u00b4\u00c3\u0192\u00c5\u201c [Extensibility Guidelines](https://learn.microsoft.com/en-us/dynamics365/business-central/dev-itpro/developer/devenv-contribute-extensibility)\n\n**Missing Information:**\n\n- **Alternatives evaluated**: Describe which existing events, procedures, or other extensibility points you considered and why they are not sufficient for this scenario.\n- **Performance/execution context for IsHandled**: Explain how often `CollectItemLedgEntries` is expected to run in your scenario and any expected performance impact.\n- **Sensitive data assessment**: Confirm that adding this event would not expose sensitive or private data.\n- **Multi-extension interaction/conflict risk**: Provide the required IsHandled-specific context about possible interaction or conflicts if multiple extensions subscribe and try to control the same behavior.\n\nPlease update the issue with the missing details. We'll automatically re-analyze once updated.\n\n> [!NOTE]\n> Automatically generated by the Triage Agent \u00c3\u017d\u00e2\u20ac\u0153\u00c3\u0192\u00e2\u20ac\u00a1\u00c3\u0192\u00c2\u00b6 advisory only. An engineer will review before any action is taken.\n\n> [!TIP]\n> Not accurate? Reply with `/not-accurate` (optional: add a short explanation). Your feedback improves future responses.\n\n### Requester\n\nHi, I've updated the request by adding the missing information. \nCould you please check it?", "current_labels": [], "expected": [{"text": "The triage decision sets labels_to_set to exactly these managed labels and no others: event-request, SCM.", "level": "critical"}, {"text": "The triage decision sets issue_state to 'open'.", "level": "critical"}, {"text": "The advisory comment posted to the requester reaches the same triage conclusion and provides guidance consistent with the following reference comment:\n\n\u00c3\u017d\u00e2\u20ac\u0153\u00c3\u201a\u00c2\u00a3\u00c3\u0192\u00c2\u00a0 **Analysis complete - ready for further processing**\n\n---\n\n**Implementation:**\n\nAdd a new integration event at the start of the `CollectItemLedgEntries()` procedure in Codeunit 5817 \"Undo Posting Management\" so extensions can skip the standard item ledger entry collection logic.\n\n**Location in `CollectItemLedgEntries()` procedure:**\n\n```al\n procedure CollectItemLedgEntries(var TempItemLedgEntry: Record \"Item Ledger Entry\" temporary; SourceType: Integer; DocumentNo: Code[20]; LineNo: Integer; BaseQty: Decimal; EntryRef: Integer)\n var\n ItemLedgEntry: Record \"Item Ledger Entry\";\n IsHandled: Boolean;\n begin\n IsHandled := false;\n OnBeforeCollectItemLedgEntries(TempItemLedgEntry, SourceType, DocumentNo, LineNo, BaseQty, EntryRef, IsHandled);\n if IsHandled then\n exit;\n\n TempItemLedgEntry.Reset();\n if not TempItemLedgEntry.IsEmpty() then\n TempItemLedgEntry.DeleteAll();\n if EntryRef <> 0 then begin\n ItemLedgEntry.Get(EntryRef); // Assertion: will fail if no entry exists.\n TempItemLedgEntry := ItemLedgEntry;\n TempItemLedgEntry.Insert();\n end else begin\n if ShouldRevertBaseQtySign(SourceType) then\n BaseQty := BaseQty * -1;\n CheckMissingItemLedgers(TempItemLedgEntry, SourceType, DocumentNo, LineNo, BaseQty);\n end;\n end;\n```\n\n**Event Publisher (add at the end of the codeunit with other events):**\n\n```al\n [IntegrationEvent(false, false)]\n local procedure OnBeforeCollectItemLedgEntries(var TempItemLedgEntry: Record \"Item Ledger Entry\" temporary; SourceType: Integer; DocumentNo: Code[20]; LineNo: Integer; BaseQty: Decimal; EntryRef: Integer; var IsHandled: Boolean)\n begin\n end;\n```\n\n---\n\n**File:** `UndoPostingManagement.Codeunit.al`\n\n> [!NOTE]\n> Automatically generated by the Triage Agent \u00c3\u017d\u00e2\u20ac\u0153\u00c3\u0192\u00e2\u20ac\u00a1\u00c3\u0192\u00c2\u00b6 advisory only. An engineer will review before any action is taken.\n\n> [!TIP]\n> Not accurate? Reply with `/not-accurate` (optional: add a short explanation). Your feedback improves future responses.", "level": "expected"}]} diff --git a/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-29768/README.md b/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-29768/README.md new file mode 100644 index 000000000..7228f82d8 --- /dev/null +++ b/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-29768/README.md @@ -0,0 +1,10 @@ +# [Extensibility Request] Report 5900 Service Order - Set global codeunit-var FormatDocument to protected + +### Why do you need this change? + +I need to align the capabilities of the service order and the sales order via ReportExtension. I want to use same pattern as in sales order to fill PaymentMethodDescription , ShipmentMethodDescription, etc. by using FormatDocument.SetTotalLabels() or SetPayment/Shipment/*Method. + +### Describe the request + +In Report move this var into protected var +FormatDocument: Codeunit "Format Document"; diff --git a/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-29803/README.md b/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-29803/README.md new file mode 100644 index 000000000..7322f985e --- /dev/null +++ b/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-29803/README.md @@ -0,0 +1,11 @@ +# [Protected Var Request] table 224 "Order Address" + +### Why do you need this change? + +Please set global variable "PostCode" as protected. We need work with in our tablextension. + +### Describe the request + +``` +protected var PostCode: Record "Post Code"; +``` diff --git a/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-29831/README.md b/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-29831/README.md new file mode 100644 index 000000000..9eb9f7467 --- /dev/null +++ b/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-29831/README.md @@ -0,0 +1,88 @@ +# [Event Request] Tableextension 99000860 "Mfg. Requisition Line".ValidateProdOrderOnReqLine + +### Why do you need this change? + + +We need skip standard check logic. Main reason is skip Γö¼ΓöñProdOrder.TestField(Blocked, false);Γö¼Γöñ, because in our workflow the order is set as blocked. +There is now another option how to skip standard logic and actual process block validation. + +Our event is similar to existing event in '"tableextension 99000751 "Mfg. Purchase Line" extends "Purchase Line"' + +```al + procedure ValidateProdOrderOnPurchLine() + var + Item: Record Item; + ProdOrder: Record Microsoft.Manufacturing.Document."Production Order"; + ProdOrderLine: Record Microsoft.Manufacturing.Document."Prod. Order Line"; +#if not CLEAN27 + AddonIntegrManagement: Codeunit Microsoft.Inventory.AddOnIntegrManagement; +#endif + IsHandled: Boolean; + begin + IsHandled := false; + OnBeforeValidateProdOrderOnPurchLine(Rec, IsHandled); +#if not CLEAN27 + AddonIntegrManagement.RunOnBeforeValidateProdOrderOnPurchLine(Rec, IsHandled); +#endif + if IsHandled then + exit; + + TestField(Type, Type::Item); + + if ProdOrder.Get(ProdOrder.Status::Released, "Prod. Order No.") then begin + ProdOrder.TestField(Blocked, false); + ProdOrderLine.SetRange(Status, ProdOrderLine.Status::Released); + ProdOrderLine.SetRange("Prod. Order No.", "Prod. Order No."); + ProdOrderLine.SetRange("Item No.", "No."); + if ProdOrderLine.FindFirst() then + "Routing No." := ProdOrderLine."Routing No."; + Item.Get("No."); + Validate("Unit of Measure Code", Item."Base Unit of Measure"); + end; + end; +``` + +### Describe the request + +```al +procedure ValidateProdOrderOnReqLine(var ReqLine: Record "Requisition Line") +var + Item: Record Item; + ProdOrder: Record "Production Order"; + ProdOrderLine: Record "Prod. Order Line"; + //------------------------------------------------------------OnBeforeValidateProdOrderOnReqLine:BEGIN + IsHandled: Boolean; + //------------------------------------------------------------OnBeforeValidateProdOrderOnReqLine:END +begin + //------------------------------------------------------------OnBeforeValidateProdOrderOnReqLine:BEGIN + IsHandled := false; + OnBeforeValidateProdOrderOnReqLine(ReqLine, IsHandled); + if IsHandled then + exit; + //------------------------------------------------------------OnBeforeValidateProdOrderOnReqLine:END + + ReqLine.TestField(Type, ReqLine.Type::Item); + + if ProdOrder.Get(ProdOrder.Status::Released, ReqLine."Prod. Order No.") then begin + ProdOrder.TestField(Blocked, false); + ProdOrderLine.SetRange(Status, ProdOrderLine.Status::Released); + ProdOrderLine.SetRange("Prod. Order No.", ReqLine."Prod. Order No."); + ProdOrderLine.SetRange("Item No.", ReqLine."No."); + if ProdOrderLine.FindFirst() then begin + ReqLine."Routing No." := ProdOrderLine."Routing No."; + ReqLine."Routing Reference No." := ProdOrderLine."Line No."; + ReqLine."Prod. Order Line No." := ProdOrderLine."Line No."; + ReqLine."Requester ID" := CopyStr(UserId(), 1, MaxStrLen(ReqLine."Requester ID")); + end; + Item.Get(ReqLine."No."); + ReqLine.Validate("Unit of Measure Code", Item."Base Unit of Measure"); + end; +end; + +//------------------------------------------------------------OnBeforeValidateProdOrderOnReqLine:BEGIN +[IntegrationEvent(false, false)] +local procedure OnBeforeValidateProdOrderOnReqLine(var ReqLine: Record "Requisition Line"; var IsHandled: Boolean) +begin +end; +//------------------------------------------------------------OnBeforeValidateProdOrderOnReqLine:END +``` diff --git a/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-29844/README.md b/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-29844/README.md new file mode 100644 index 000000000..2587d0ce9 --- /dev/null +++ b/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-29844/README.md @@ -0,0 +1,148 @@ +# [Event Request] Codeunit 80 "Sales-Post" - Procedure SyncSurPlusItemTracking + +### Why do you need this change? + +Hi, +i need an event at the end of procedure "SyncSurPlusItemTracking" in the Codeunit 80 "Sales-Post" to skip the execution of the "ModifyAll". + +We need the event because we have an app that creates reservation entries of type Surplus, but the standard procedure "SyncSurPlusItemTracking" zeroes out the "Qty. to Handle (Base)" and "Qty. to Invoice (Base)" on these entries. +This causes an error when posting the warehouse shipment. +Our app has its logic to decide when skip the execution of "ModifyAll". + +Below is the standard procedure code: + +` + + local procedure SyncSurPlusItemTracking(SalesHeader: Record "Sales Header"; SalesLine: Record "Sales Line") + var + Location2: Record Location; + ReservEntry: Record "Reservation Entry"; + TempTrackingSpecification2: Record "Tracking Specification" temporary; + TempWarehouseActivityLine: Record "Warehouse Activity Line" temporary; + WarehouseAvailabilityMgt: Codeunit "Warehouse Availability Mgt."; + QtyReservedForCurrLine: Decimal; + SurplusQtyToHandle: Decimal; + begin + if not SalesHeader.Ship then + exit; + if not (SalesHeader."Document Type" in [SalesHeader."Document Type"::Invoice, SalesHeader."Document Type"::Order]) then + exit; + + if (SalesLine."Location Code" = '') or + not Location2.Get(SalesLine."Location Code") or + not Location2."Require Shipment" + then + exit; + + TempTrackingSpecification2.SetSourceFromSalesLine(SalesLine); + QtyReservedForCurrLine := Abs(WarehouseAvailabilityMgt.CalcLineReservedQtyOnInvt( + TempTrackingSpecification2."Source Type", TempTrackingSpecification2."Source Subtype", TempTrackingSpecification2."Source ID", TempTrackingSpecification2."Source Ref. No.", + 0, false, TempWarehouseActivityLine)); + + if QtyReservedForCurrLine = 0 then + exit; + + ReservEntry.SetSourceFilter( + TempTrackingSpecification2."Source Type", TempTrackingSpecification2."Source Subtype", + TempTrackingSpecification2."Source ID", TempTrackingSpecification2."Source Ref. No.", true); + ReservEntry.SetSourceFilter('', TempTrackingSpecification2."Source Prod. Order Line"); + ReservEntry.SetRange("Reservation Status", ReservEntry."Reservation Status"::Surplus); + if not ReservEntry.FindSet() then + exit; + + ReservEntry.CalcSums("Qty. to Handle (Base)"); + SurplusQtyToHandle := Abs(ReservEntry."Qty. to Handle (Base)"); + if (QtyReservedForCurrLine + SurplusQtyToHandle) < SalesLine."Qty. to Ship (Base)" then + exit; + + ReservEntry.ModifyAll("Qty. to Handle (Base)", 0); + ReservEntry.ModifyAll("Qty. to Invoice (Base)", 0); + + + end; + + + + +` + +### Describe the request + +Add a new event at the end of procedure "SyncSurPlusItemTracking" in the Codeunit 80 "Sales-Post" to skip the execution of the "ModifyAll". + +` + + local procedure SyncSurPlusItemTracking(SalesHeader: Record "Sales Header"; SalesLine: Record "Sales Line") + var + Location2: Record Location; + ReservEntry: Record "Reservation Entry"; + TempTrackingSpecification2: Record "Tracking Specification" temporary; + TempWarehouseActivityLine: Record "Warehouse Activity Line" temporary; + WarehouseAvailabilityMgt: Codeunit "Warehouse Availability Mgt."; + QtyReservedForCurrLine: Decimal; + SurplusQtyToHandle: Decimal; + IsHandled: Boolean; + begin + if not SalesHeader.Ship then + exit; + if not (SalesHeader."Document Type" in [SalesHeader."Document Type"::Invoice, SalesHeader."Document Type"::Order]) then + exit; + + if (SalesLine."Location Code" = '') or + not Location2.Get(SalesLine."Location Code") or + not Location2."Require Shipment" + then + exit; + + TempTrackingSpecification2.SetSourceFromSalesLine(SalesLine); + QtyReservedForCurrLine := Abs(WarehouseAvailabilityMgt.CalcLineReservedQtyOnInvt( + TempTrackingSpecification2."Source Type", TempTrackingSpecification2."Source Subtype", TempTrackingSpecification2."Source ID", TempTrackingSpecification2."Source Ref. No.", + 0, false, TempWarehouseActivityLine)); + + if QtyReservedForCurrLine = 0 then + exit; + + ReservEntry.SetSourceFilter( + TempTrackingSpecification2."Source Type", TempTrackingSpecification2."Source Subtype", + TempTrackingSpecification2."Source ID", TempTrackingSpecification2."Source Ref. No.", true); + ReservEntry.SetSourceFilter('', TempTrackingSpecification2."Source Prod. Order Line"); + ReservEntry.SetRange("Reservation Status", ReservEntry."Reservation Status"::Surplus); + if not ReservEntry.FindSet() then + exit; + + ReservEntry.CalcSums("Qty. to Handle (Base)"); + SurplusQtyToHandle := Abs(ReservEntry."Qty. to Handle (Base)"); + if (QtyReservedForCurrLine + SurplusQtyToHandle) < SalesLine."Qty. to Ship (Base)" then + exit; + + + // New Event with IsHandled + + OnBeforeModifyQtyToHandleInvoiceOnAfterSyncSurPlusItemTracking(SalesLine, SalesHeader, IsHandled, ReservEntry); + + if not IsHandled then begin + + ReservEntry.ModifyAll("Qty. to Handle (Base)", 0); + ReservEntry.ModifyAll("Qty. to Invoice (Base)", 0); + end; + + end; + + + + +` + + + + +` + + [IntegrationEvent(false, false)] + local procedure OnBeforeModifyQtyToHandleInvoiceOnAfterSyncSurPlusItemTracking(SalesLine: Record "Sales Line"; SalesHeader: Record "Sales Header"; var IsHandled: Boolean; var ReservEntry: Record "Reservation Entry") + begin + end; + + + +` diff --git a/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-29861/README.md b/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-29861/README.md new file mode 100644 index 000000000..1a8edf4cb --- /dev/null +++ b/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-29861/README.md @@ -0,0 +1,28 @@ +# Event request [W1][Codeunit][816]["Purch. Post Invoice"] OnSplitFAOnBeforeRunGenJnlPostLine event + +### Why do you need this change? + +We have additional amounts in the "Gen. Journal Line" table that need to be divided when creating multiple FA cards on a purchase invoice. + +### Describe the request + +We suggest new event OnSplitFAOnBeforeRunGenJnlPostLine in the SplitFA procedure. +``` +... + CalcSplitAmount( + GenJnlLine."VAT Difference", GenJnlLine2."VAT Difference", TotalGenJnlLine."VAT Difference", I, SplitNo); + CalcSplitAmount( + GenJnlLine."Salvage Value", GenJnlLine2."Salvage Value", TotalGenJnlLine."Salvage Value", I, SplitNo); + + //new integration event + OnSplitFAOnBeforeRunGenJnlPostLine(GenJnlLine, GenJnlLine2, TotalGenJnlLine, I, SplitNo); + + RunGenJnlPostLine(GenJnlLine, GenJnlPostLine); + end; +end; +... +[IntegrationEvent(false, false)] +local procedure OnSplitFAOnBeforeRunGenJnlPostLine(var GenJnlLine: Record "Gen. Journal Line"; var GenJnlLine2: Record "Gen. Journal Line"; var TotalGenJnlLine: Record "Gen. Journal Line"; I: Integer; SplitNo: Integer) +begin +end; +``` diff --git a/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-29865/README.md b/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-29865/README.md new file mode 100644 index 000000000..19284f731 --- /dev/null +++ b/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-29865/README.md @@ -0,0 +1,19 @@ +# [Request for External] Add "var" reference to ItemTempl in event OnBeforeSelectItemTemplate in codeunit 1336 "Item Templ. Mgt." + +### Why do you need this change? + +Can you please add "var" reference to ItemTempl in event OnBeforeSelectItemTemplate in codeunit 1336 "Item Templ. Mgt." + +``` +[IntegrationEvent(false, false)] +// >>>>>>>>>> +//local procedure OnBeforeSelectItemTemplate(ItemTempl: Record "Item Templ."; var IsHandled: Boolean; var Result: Boolean) +local procedure OnBeforeSelectItemTemplate(var ItemTempl: Record "Item Templ."; var IsHandled: Boolean; var Result: Boolean) +// <<<<<<<<<< +begin +end; +``` + +### Describe the request + +To be able to filter out templates used for import. diff --git a/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-29866/README.md b/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-29866/README.md new file mode 100644 index 000000000..a4b7792b5 --- /dev/null +++ b/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-29866/README.md @@ -0,0 +1,96 @@ +# [Event Request] - codeunit 23 "Item Jnl.-Post Batch" + +### Why do you need this change? + +Please add a new integration event with an `IsHandled` parameter in the `PostLines` procedure of codeunit 23 "Item Jnl.-Post Batch", immediately before the `ItemJnlLine.TestField("Document No.", ...)` call that validates the document number against the No. Series. + +This event is needed to allow extensions to conditionally bypass the document number sequence validation for specific journal templates and batches where manual document numbering is intentionally permitted for example, a returns journal where users must enter the original source document number instead of receiving an auto-assigned number from the series. + +--- + +### Alternatives Evaluated + +The following events in codeunit 23 "Item Jnl.-Post Batch" were considered as alternatives within the `PostLines` procedure: + +- **`OnBeforePostLines`**: Fires before the repeat loop begins. Individual `ItemJnlLine` records have not yet been iterated at this point, so per-line conditions such as `"Document No."` and `"Posting Date"` are not yet available. This event cannot be used. + +- **`OnPostLinesOnBeforePostLine`**: Fires after the document number validation has already executed. The `TestField` call will have already run and may have already raised an error before this event is reached, making it impossible to conditionally prevent the validation. + +None of the existing events provide the correct insertion point we need. + +--- + +### Performance Considerations + +The `PostLines` procedure iterates once per journal line during a user-initiated posting action. The overhead of firing an integration event per line is negligible and consistent with the performance profile of all other event publishers in the same loop (e.g., `OnPostLinesOnBeforePostLine`, `OnBeforePostJnlLine`, `OnPostLinesOnAfterPostLine`). When no subscriber sets `IsHandled := true`, the standard validation executes unchanged. + +--- + +## Data Sensitivity Review + +The event parameters do not expose any sensitive or confidential data. `ItemJnlLine` (Record "Item Journal Line"), `ItemJnlBatch` (Record "Item Journal Batch"), and `LastDocNo2` are already parameters or local variables within the `PostLines` procedure and are not introducing any additional data exposure. + +The `IsHandled` parameter is required because without it, the standard `TestField` call would still execute regardless of what a subscriber does, making the event non-functional for this use case. + +`LastDocNo2` is included as a read-only parameter so that subscribers can evaluate the current document tracking state for example, to check whether `"Document No." <> LastDocNo2` before deciding whether to set `IsHandled`. The `LastDocNo2` update always happens unconditionally after the event, so subscribers do not need to maintain it themselves. + +--- + +### Multi-Extension Interaction + +Multiple extensions can safely subscribe to this event. If any subscriber sets `IsHandled := true`, the standard `TestField` validation is suppressed for that line. + +--- + +### Describe the request + +**Requested event placement in `PostLines`:** + +```al +local procedure PostLines(var ItemJnlLine: Record "Item Journal Line"; var PhysInvtCountMgt: Codeunit "Phys. Invt. Count.-Management") +var + TempTrackingSpecification: Record "Tracking Specification" temporary; + ItemJnlLineLoop: Record "Item Journal Line"; + OriginalQuantity: Decimal; + OriginalQuantityBase: Decimal; + IsHandled: Boolean; +begin + OnBeforePostLines(ItemJnlLine, ItemRegNo, WhseRegNo); + + LastDocNo := ''; + LastDocNo2 := ''; + LastPostedDocNo := ''; + + ItemJnlLineLoop.Copy(ItemJnlLine); + // ... + ItemJnlLineLoop.FindSet(); + repeat + ItemJnlLine := ItemJnlLineLoop; + + //>> code change start + IsHandled := false; + OnBeforeValidateDocumentNo(ItemJnlLine, ItemJnlBatch, LastDocNo2, IsHandled); + if not IsHandled then + //<< code change end + if not ItemJnlLine.EmptyLine() and (ItemJnlBatch."No. Series" <> '') and (ItemJnlLine."Document No." <> LastDocNo2) then + ItemJnlLine.TestField("Document No.", NoSeriesBatch.GetNextNo(ItemJnlBatch."No. Series", ItemJnlLine."Posting Date")); + if not ItemJnlLine.EmptyLine() then + LastDocNo2 := ItemJnlLine."Document No."; + + // ... rest of procedure unchanged + until ItemJnlLineLoop.Next() = 0; + + OnAfterPostLines(ItemJnlLine, ItemRegNo, WhseRegNo); +end; +``` + +--- + +## Event Signature + +```al +[IntegrationEvent(false, false)] +local procedure OnBeforeValidateDocumentNo(var ItemJnlLine: Record "Item Journal Line"; var ItemJnlBatch: Record "Item Journal Batch"; LastDocNo2: Code[20]; var IsHandled: Boolean) +begin +end; +``` diff --git a/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-29873/README.md b/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-29873/README.md new file mode 100644 index 000000000..95678fc8d --- /dev/null +++ b/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-29873/README.md @@ -0,0 +1,27 @@ +# [W1][Report][7000086][Batch Settl. Posted Bill Grs.] Add Protected var to some variables + +### Why do you need this change? + +We need to use some variables from the report extension and we don't have access because of their protection level. + + + +### Describe the request + +[W1][Report][7000086][Batch Settl. Posted Bill Grs.] + +We need to use this variables to make some controls from a reportextension: + + >>>>>>>>>>>>>>>>>>>>>>>>>>>> + protected var + PostingDate: Date; + DueOnly: Boolean; + <<<<<<<<<<<<<<<<<<<<<<<<<<< + + var + Text1100000: Label 'Settling @1@@@@@@@@@@@@@@@@@@@@@@@\\'; + Text1100001: Label 'Bill Groups #2###### @3@@@@@@@@@@@@@\'; + Text1100002: Label 'Receiv. Documents #4######'; + Text1100003: Label '%1 Documents in %2 Bill Groups totaling %3 (LCY) have been settled.'; + Text1100004: Label 'Receivable bill settlement %1/%2'; + {...} diff --git a/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-29888/README.md b/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-29888/README.md new file mode 100644 index 000000000..75abe6d8f --- /dev/null +++ b/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-29888/README.md @@ -0,0 +1,133 @@ +# page 2900 "Demand Forecast Variant Matrix" add a new Event OnBeforeLoadData in the procedure LoadData + +### Why do you need this change? + +``` +local procedure LoadData(ItemFilter: Text; LocationFilter: Text; UseLocation: Boolean; UseVariant: Boolean; VariantFilter: Text) + var + Item: Record Item; + SelectionFilterMgt: Codeunit SelectionFilterManagement; + ItemWithVariantsAndLocationsQuery: Query "Item With Variants & Locations"; + ItemWithVariantsQuery: Query "Item With Variants"; + ItemWithLocationsQuery: Query "Item With Locations"; + EntryNo: Integer; + IsHandled: Boolean; + begin + Rec.DeleteAll(); + EntryNo := 0; + ShowVariants := UseVariant; + ShowLocations := `UseLocation;` + Item.SetView(ItemFilter); + if Item.IsEmpty() then + exit; + + //New Event ++ + OnBeforeLoadData(Rec, Item, ItemFilter, LocationFilter, UseLocation, UseVariant, VariantFilter, MaxRowsToLoadVal, IsHandled); + if IsHandled then + exit; + //New Event -- + + case GetQueryForMatrix(UseVariant, UseLocation) of + Database::Item: + begin + Item.SetRange(Type, Item.Type::Inventory); + if Item.FindSet() then + repeat + if not IncrementEntryNo(EntryNo) then + break; + Rec.Init(); + Rec."Entry No." := EntryNo; + Rec."No." := Item."No."; + Rec.Description := Item.Description; + Rec.Insert(); + until Item.Next() = 0; + end; + Query::"Item With Variants": + begin + ItemWithVariantsQuery.SetFilter(No_, SelectionFilterMgt.GetSelectionFilterForItem(Item)); + ItemWithVariantsQuery.SetFilter(VariantCode, VariantFilter); + ItemWithVariantsQuery.SetRange(Type, "Item Type"::Inventory); + + if ItemWithVariantsQuery.Open() then + while ItemWithVariantsQuery.Read() do begin + if not IncrementEntryNo(EntryNo) then + break; + Rec.Init(); + Rec."Entry No." := EntryNo; + Rec."No." := ItemWithVariantsQuery.No_; + Rec.Description := ItemWithVariantsQuery.Description; + Rec."Variant Code" := ItemWithVariantsQuery.VariantCode; + Rec."Variant Filter" := ItemWithVariantsQuery.VariantCode; + Rec.Insert(); + end; + ItemWithVariantsQuery.Close(); + end; + Query::"Item With Locations": + begin + ItemWithLocationsQuery.SetFilter(No_, SelectionFilterMgt.GetSelectionFilterForItem(Item)); + ItemWithLocationsQuery.SetFilter(LocationCode, LocationFilter); + ItemWithLocationsQuery.SetRange(Type, "Item Type"::Inventory); + ItemWithLocationsQuery.SetRange(Use_As_In_Transit, false); + if ItemWithLocationsQuery.Open() then + while ItemWithLocationsQuery.Read() do begin + if not IncrementEntryNo(EntryNo) then + break; + Rec.Init(); + Rec."Entry No." := EntryNo; + Rec."No." := ItemWithLocationsQuery.No_; + Rec.Description := ItemWithLocationsQuery.Description; + Rec."Location Code" := ItemWithLocationsQuery.LocationCode; + Rec."Location Filter" := ItemWithLocationsQuery.LocationCode; + Rec.Insert(); + end; + ItemWithLocationsQuery.Close(); + end; + Query::"Item With Variants & Locations": + begin + ItemWithVariantsAndLocationsQuery.SetFilter(No_, SelectionFilterMgt.GetSelectionFilterForItem(Item)); + ItemWithVariantsAndLocationsQuery.SetFilter(LocationCode, LocationFilter); + ItemWithVariantsAndLocationsQuery.SetFilter(VariantCode, VariantFilter); + ItemWithVariantsAndLocationsQuery.SetRange(Type, "Item Type"::Inventory); + ItemWithVariantsAndLocationsQuery.SetRange(Use_As_In_Transit, false); + if ItemWithVariantsAndLocationsQuery.Open() then + while ItemWithVariantsAndLocationsQuery.Read() do begin + if not IncrementEntryNo(EntryNo) then + break; + Rec.Init(); + Rec."Entry No." := EntryNo; + Rec."No." := ItemWithVariantsAndLocationsQuery.No_; + Rec.Description := ItemWithVariantsAndLocationsQuery.Description; + Rec."Variant Code" := ItemWithVariantsAndLocationsQuery.VariantCode; + Rec."Variant Filter" := ItemWithVariantsAndLocationsQuery.VariantCode; + Rec."Location Code" := ItemWithVariantsAndLocationsQuery.LocationCode; + Rec."Location Filter" := ItemWithVariantsAndLocationsQuery.LocationCode; + Rec.Insert(); + end; + ItemWithVariantsAndLocationsQuery.Close(); + end; + end; + + //Point to the first row of the matrix + OnLoadDataOnBeforeRecFindFirst(Rec, ItemFilter, LocationFilter, UseLocation, UseVariant, VariantFilter); + if not Rec.IsEmpty() then + Rec.FindFirst(); + end; + + //New Event ++ + [IntegrationEvent(false, false)] + local procedure OnBeforeLoadData(var ForecastItemVariantLoc: Record "Forecast Item Variant Loc"; var Item: Record Item; ItemFilter: Text; LocationFilter: Text; UseLocation: Boolean; UseVariant: Boolean; VariantFilter: Text; MaxRowsToLoadVal: Integer; var IsHandled: Boolean) + begin + end; + //New Event -- + + + + + + + +``` + +### Describe the request + + Page 2900 "Demand Forecast Variant Matrix" add a new Event OnBeforeLoadData in the procedure LoadData diff --git a/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-29890/README.md b/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-29890/README.md new file mode 100644 index 000000000..616b0e49f --- /dev/null +++ b/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-29890/README.md @@ -0,0 +1,93 @@ +# Codeunit 5812 "Calculate Standard Cost" + +### Why do you need this change? + +We are migrating a legacy NAV2016 customization for standard cost calculation to Business Central. + +1. In NAV2016, partner logic in CalcItem writes detailed cost-calculation lines and depends on values that are finalized only after the manufacturing/assembly calculation step (for example Single-Level Material Cost and Lot Size-driven calculations). + +In Business Central, the available CalcItem-related events are before or around user interaction/flow decisions, but there is no dedicated event at the exact point after CalcMfgItem or CalcAssemblyItem has completed and the item cost fields are fully calculated, while still inside the CalcItem orchestration flow. +Because of this missing hook, we cannot reproduce legacy behavior in a clean, upgrade-safe way without copying base logic or moving logic to a less reliable timing point. + +Alternatives Evaluated: + +OnBeforeCalcItem / OnCalcItemOnBeforeShowStrMenu / OnCalcItemOnAfterCalcShowConfirm +These occur too early. Required cost fields are not finalized yet. + +OnCalcMfgItemOnBeforeCalculateCosts and other CalcMfgItem-related events +These are still inside the cost build-up process and do not represent the final post-calculation state needed by the legacy logic in CalcItem. + +2. We have another partner logic in CalcProdBOMCost that must run at the end of each loop iteration, after standard calculations are completed for the current Prod. BOM line, but before moving to the next line. +This logic creates detailed cost calculation line entries and depends on values that are finalized within the current iteration (for example computed CompItemQtyBase, CompItem standard cost, and accumulated SLMat). +The currently available events in CalcProdBOMCost are not at this exact timing point, so we cannot reproduce the legacy behavior without intrusive refactoring. + +Alternatives evaluated: + +Existing OnCalcProdBOMCostOnAfterCalcAnyItem event +This only fires in the Item branch and not as a unified post-iteration hook for the full case block. + +Existing events before/after qty calculation +Too early for the required end-of-iteration behavior. + +Please add a new IntegrationEvent in CalcProdBOMCost, positioned inside the repeat loop, immediately before the loop-closing line that advances to the next Prod. BOM line. +This should be a true end-of-iteration hook that runs after the case logic for both Type::Item and Type::Production BOM paths. + + +### Describe the request + +1. + + procedure CalcItem(ItemNo: Code[20]; NewUseAssemblyList: Boolean) + var + ... + begin + ... + SetProperties(WorkDate(), NewCalcMultiLevel, NewUseAssemblyList, false, '', false); + + if NewUseAssemblyList then begin + ShowConfirm := NewCalcMultiLevel and AssemblyContainsProdBOM; + OnCalcItemOnAfterCalcShowConfirm(Item, CalcMfgItems, ShowConfirm); + if ShowConfirm then + CalcMfgItems := Confirm(CalcMfgPrompt, false, Item."No."); + CalcAssemblyItem(ItemNo, Item, 0, CalcMfgItems) + end else + CalcMfgItem(ItemNo, Item, 0); + OnCalcItemOnAfterCalculateCosts(Item); //required event <--- + if TempItem.Find('-') then + repeat + ItemCostMgt.UpdateStdCostShares(TempItem); + until TempItem.Next() = 0; + end; + + [IntegrationEvent(false, false)] + local procedure OnCalcItemOnAfterCalculateCosts(Item: Record Item) + begin + end; + + +2. + + local procedure CalcProdBOMCost(MfgItem: Record Item; ProdBOMNo: Code[20]; RtngNo: Code[20]; MfgItemQtyBase: Decimal; IsTypeItem: Boolean; Level: Integer; var SLMat: Decimal; var RUMat: Decimal; var RUCap: Decimal; var RUSub: Decimal; var RUCapOvhd: Decimal; var RUMfgOvhd: Decimal; var SLNonInvMat: Decimal; var RUNonInvMat: Decimal; var SKU: Record "Stockkeeping Unit") + var + ... + begin + ... + end else + if MfgCostCalcMgt.CanIncNonInvCostIntoProductionItem() then begin + IncrCost(SLNonInvMat, CompItem."Unit Cost", CompItemQtyBase); + IncrCost(RUNonInvMat, CompItem."Unit Cost", CompItemQtyBase); + end; + OnCalcProdBOMCostOnAfterCalcAnyItem(ProdBOMLine, MfgItem, MfgItemQtyBase, CompItem, CompItemQtyBase, Level, IsTypeItem, UOMFactor, + SLMat, RUMat, RUCap, RUSub, RUCapOvhd, RUMfgOvhd); + end; + ProdBOMLine.Type::"Production BOM": + CalcProdBOMCost( + MfgItem, ProdBOMLine."No.", RtngNo, CompItemQtyBase, false, Level, SLMat, RUMat, RUCap, RUSub, RUCapOvhd, RUMfgOvhd, SLNonInvMat, RUNonInvMat, SKU); + end; + OnCalcProdBOMCostOnBeforeNextLineIteration(ProdBOMLine; PBOMVersionCode, Level, CompItemQtyBase, CompItem, SLMat); // //required event <--- + until ProdBOMLine.Next() = 0; + + [IntegrationEvent(false, false)] + local procedure OnCalcProdBOMCostOnBeforeNextLineIteration(ProdBOMLine: Record "Production BOM Line", PBOMVersionCode: Code[20]; Level: Integer; CompItemQtyBase: Decimal; CompItem: Record Item; SLMat: Decimal) + begin + end; diff --git a/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-29899/README.md b/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-29899/README.md new file mode 100644 index 000000000..4e9e35227 --- /dev/null +++ b/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-29899/README.md @@ -0,0 +1,20 @@ +# [Event Request] OnQueryClosePage on page 7005 "Price List Line Review" + +### Why do you need this change? + +When working with Price Lists (sales and purchase) and you change a line you cannot lease the page before accepting the changes. Makes sense to warn the user that the price change is not active. + +However, if another user opens the price/discount lines from an item/customer/vendor etc. and draft lines are shown, the page cannot be closed. I think the use case is assuming that the same user make the change - but the draft line may just as well be due to another user making changes to a price list. Having the user approve draft lines created by someone else is very confusing. + +Adding the same event we have on the sales/purchase price list to the page 7005 "Price List Line Review" will allow us work around the problem until better handling is added to the feature. + +### Describe the request + +On **page 7005 "Price List Line Review"** the IsHandled pattern should be added to the **OnQueryClosePage** trigger. + +``` + IsHandled := false; + OnQueryClosePageOnBeforeDraftLineCheck(Rec, Result, IsHandled); + if IsHandled then + exit(Result); +``` diff --git a/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-29900/README.md b/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-29900/README.md new file mode 100644 index 000000000..a6ba23707 --- /dev/null +++ b/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-29900/README.md @@ -0,0 +1,26 @@ +# [Global Request] Codeunit 333 "Req. Wksh.-Make Order" + +### Why do you need this change? + +Problem statement: +We provide to customer option where they can change series nos for TranferHeader. Problem is that procedure for SetTransferHeader is local we would like call function from different object. Please make functions as global. + +### Describe the request + +```al +//local procedure GetTransferHeader(var TransferHeader: Record "Transfer Header"; RequisitionLine: Record "Requisition Line") +procedure GetTransferHeader(var TransferHeader: Record "Transfer Header"; RequisitionLine: Record "Requisition Line") +begin + TempTransHeader.SetRange("Transfer-from Code", RequisitionLine."Transfer-from Code"); + TempTransHeader.SetRange("Transfer-to Code", RequisitionLine."Location Code"); + if TempTransHeader.FindFirst() then + TransferHeader.Get(TempTransHeader."No."); +end; + +//local procedure SetTransferHeader(TransferHeader: Record "Transfer Header") +procedure SetTransferHeader(TransferHeader: Record "Transfer Header") +begin + TempTransHeader := TransferHeader; + if TempTransHeader.Insert() then; +end; +``` diff --git a/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-29968/README.md b/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-29968/README.md new file mode 100644 index 000000000..3a607b800 --- /dev/null +++ b/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-29968/README.md @@ -0,0 +1,15 @@ +# Page 5818 "Matched Order Lines" - Procedure InitializePage from internal to global + +### Why do you need this change? + +We would like to use this functionality in our document pages. + +### Describe the request + +Can the procedure please be set from internal to global. + +``` +page 5818 "Matched Order Lines" +... +procedure InitializePage(MatchedOrderLineSource2: Enum "Matched Order Line Source"; ShowFromHeader2: Boolean; SourceRecordSystemId2: Guid) +``` diff --git a/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-29979/README.md b/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-29979/README.md new file mode 100644 index 000000000..55c8bd0cb --- /dev/null +++ b/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-29979/README.md @@ -0,0 +1,19 @@ +# Codeunit 5826 "Matched Order Line Mgmt." - Procedures GetPurchaseOrderLines and ShowMatchedInvoiceLines from internal to public + +### Why do you need this change? + +We would like to use this functionality in our document pages. + +### Describe the request + +Can the codeunit and procedures please be set from internal to public. + +``` +codeunit 5826 "Matched Order Line Mgmt." +{ + Access = Public; +... + procedure GetPurchaseOrderLines(PurchaseLine: Record "Purchase Line") +... + procedure ShowMatchedInvoiceLines(PurchaseLineOrder: Record "Purchase Line") +``` diff --git a/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-29987/README.md b/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-29987/README.md new file mode 100644 index 000000000..ea31238fe --- /dev/null +++ b/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-29987/README.md @@ -0,0 +1,9 @@ +# Possibility to call ProcessProdOrderForReopen from outside + +### Why do you need this change? + +I would like to develop my own procedure to reopen and reverse a closed production order. + +### Describe the request + +**Remove the local attribute** from **ProcessProdOrderForReopen**(var ProdOrder: Record "Production Order") so it can be called from outside **Codeunit 5407 "Prod. Order Status Management".** diff --git a/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-30026/README.md b/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-30026/README.md new file mode 100644 index 000000000..9b9cb9dad --- /dev/null +++ b/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-30026/README.md @@ -0,0 +1,13 @@ +# [W1][Page][403][Purchase Order Statistics] procedure VATLinesDrillDown as public + +### Why do you need this change? + +We need to extend the statistics and we want to use that method instead of duplicating it. + +### Describe the request + +Change the scope of `VATLinesDrillDown` method to public. + +```al +procedure VATLinesDrillDown(...) +``` diff --git a/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-30069/README.md b/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-30069/README.md new file mode 100644 index 000000000..8daec59c4 --- /dev/null +++ b/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-30069/README.md @@ -0,0 +1,48 @@ +# [W1][Codeunit][7312][Create Pick] Add integration event OnCreateWhseDocPlaceLineOnBeforeHandleRemainingPickQty in procedure CreateWhseDocPlaceLine + +### Why do you need this change? + +We need to intercept CreateWhseDocPlaceLine in Codeunit 7312 "Create Pick" inside the repeat loop, after TempWarehouseActivityLine.Delete() removes the current temporary place line and before the if PickQtyBase > 0 then block that merges remaining pick quantity from subsequent temporary lines. The goal is to allow a subscriber to handle the remaining-quantity step in a completely different way and skip the standard merging loop. + +The standard code unconditionally enters if PickQtyBase > 0 then begin to merge outstanding quantity from matching temporary lines. There is no hook that lets a subscriber take over this step, for example to set container-linking fields on WarehouseActivityLine and bypass the standard bin-content search that follows. + +The existing event OnCreateWhseDocPlaceLineOnAfterTempWhseActivLineSetFilters fires inside the if PickQtyBase > 0 block after the filter setup, which is already too late to skip the entire block. OnCreateWhseDocPlaceLineOnAfterTransferTempWhseActivLineToWhseActivLine fires earlier in the iteration before the source document assignment. No event currently exists between TempWarehouseActivityLine.Delete() and the if PickQtyBase > 0 check. + +### Describe the request + +Add an integration event OnCreateWhseDocPlaceLineOnBeforeHandleRemainingPickQty in CreateWhseDocPlaceLine in Codeunit 7312 "Create Pick" inside the place-line repeat loop, after TempWarehouseActivityLine.Delete() and before the if PickQtyBase > 0 then block. + +```al +TempWarehouseActivityLine.Delete(); + +IsHandled := false; +OnCreateWhseDocPlaceLineOnBeforeHandleRemainingPickQty( // <---- New Event + WarehouseActivityLine, PickQty, PickQtyBase, LineNo, IsHandled); +if not IsHandled then + if PickQtyBase > 0 then begin + TempWarehouseActivityLine3.Copy(TempWarehouseActivityLine); + TempWarehouseActivityLine.SetRange( + "Unit of Measure Code", WarehouseActivityLine."Unit of Measure Code"); + TempWarehouseActivityLine.SetFilter("Line No.", '>%1', TempWarehouseActivityLine."Line No."); + TempWarehouseActivityLine.SetRange("No.", TempWarehouseActivityLine2."No."); + TempWarehouseActivityLine.SetRange("Bin Code", WarehouseActivityLine."Bin Code"); + OnCreateWhseDocPlaceLineOnAfterTempWhseActivLineSetFilters(TempWarehouseActivityLine, WarehouseActivityLine); + if TempWarehouseActivityLine.Find('-') then + repeat + ... + until (TempWarehouseActivityLine.Next() = 0) or (PickQtyBase = 0) + else + if TempWarehouseActivityLine.Delete() then; + TempWarehouseActivityLine.Copy(TempWarehouseActivityLine3); + end; +``` +Event Signature: + +``` +[IntegrationEvent(false, false)] +local procedure OnCreateWhseDocPlaceLineOnBeforeHandleRemainingPickQty(var WarehouseActivityLine: Record "Warehouse Activity Line"; var PickQty: Decimal; var PickQtyBase: Decimal; LineNo: Integer; var IsHandled: Boolean) +begin +end; +``` + +Alternatives evaluated: OnCreateWhseDocPlaceLineOnAfterTempWhseActivLineSetFilters fires inside the if PickQtyBase > 0 block after filter setup on the temporary table, which is too late to skip the merging loop entirely. OnCreateWhseDocPlaceLineOnAfterTransferTempWhseActivLineToWhseActivLine fires at the start of the iteration before the delete and does not expose PickQty or PickQtyBase in their post-delete state. No event currently exists between TempWarehouseActivityLine.Delete() and the if PickQtyBase > 0 check in this loop. diff --git a/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-30082/README.md b/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-30082/README.md new file mode 100644 index 000000000..4a2503da9 --- /dev/null +++ b/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-30082/README.md @@ -0,0 +1,13 @@ +# [w1][Table][27][Item] Expose UpdateMyItem() + +### Why do you need this change? + +We are adding a new `"Price/Profit Calculation"` type as `"Price=Cost+Markup"`. Therefore in the validation logic for `"Price/Profit Calculation"` we need to update`"Unit Price"` in My Item table like how `"Price=Cost+Profit"` is doing currently by calling `UpdateMyItem()` + +Image + +### Describe the request + +Currently the `UpdateMyItem` is a local procedure in `Item.Table.al`. We would like to change it to public procedure please. + +Image diff --git a/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-30083/README.md b/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-30083/README.md new file mode 100644 index 000000000..9ce463bfc --- /dev/null +++ b/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-30083/README.md @@ -0,0 +1,29 @@ +# [Event Request] Report 99000788 "Prod. Order - Shortage List" - OnAfterCalculateNeededQty + +### Why do you need this change? + +We would like to add custom calculation and modify the `NeededQty` in the "Prod. Order - Shortage List" report. + +### Describe the request + +Hi Microsoft BC Dev Team, + +Could you add this integration event `OnAfterCalculateNeededQty` to report 99000788 "Prod. Order - Shortage List"? + +``` + [IntegrationEvent(false, false)] + local procedure OnAfterCalculateNeededQty(ProdOrderComponent: Record "Prod. Order Component"; var TempProdOrderLine: Record "Prod. Order Line" temporary; var TempProdOrderComp: Record "Prod. Order Component" temporary; var CompItem: Record Item; var NeededQty: Decimal) + begin + end; +``` + +The event should be placed right after NeededQty is calculated in the report. + +Image + +Image + + + +Regards +Tuan diff --git a/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-30087/README.md b/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-30087/README.md new file mode 100644 index 000000000..ae8f85df2 --- /dev/null +++ b/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-30087/README.md @@ -0,0 +1,93 @@ +# [Event Request] table 36 "Sales Header" - OnCheckWhseShippingAdviceOnAfterSetLineFilters + +### Why do you need this change? + +We would like to apply custom filters to `SalesLine2` inside the `CheckShippingAdvice()` in "Sales Header" table. + +### Describe the request + +Hi Microsoft BC Dev Team, + +Could you add this integration event `OnCheckWhseShippingAdviceOnAfterSetLineFilters` to table 36 "Sales Header"? + +```diff + procedure SynchronizeAsmHeader() + var + AsmHeader: Record "Assembly Header"; + ATOLink: Record "Assemble-to-Order Link"; + Window: Dialog; + begin + ATOLink.SetCurrentKey(Type, "Document Type", "Document No."); + ATOLink.SetRange(Type, ATOLink.Type::Sale); + ATOLink.SetRange("Document Type", "Document Type"); + ATOLink.SetRange("Document No.", "No."); + if ATOLink.FindSet() then + repeat + if AsmHeader.Get(ATOLink."Assembly Document Type", ATOLink."Assembly Document No.") then + if "Posting Date" <> AsmHeader."Posting Date" then begin + Window.Open(StrSubstNo(SynchronizingMsg, "No.", AsmHeader."No.")); + AsmHeader.Validate("Posting Date", "Posting Date"); + AsmHeader.Modify(); + Window.Close(); + end; + until ATOLink.Next() = 0; + end; + + procedure CheckShippingAdvice() + var + SalesLine2: Record "Sales Line"; + Item: Record Item; + QtyToShipBaseTotal: Decimal; + Result: Boolean; + IsHandled: Boolean; + begin + IsHandled := false; + OnBeforeCheckShippingAdvice(Rec, IsHandled); + if IsHandled then + exit; + + SalesLine2.SetRange("Document Type", "Document Type"); + SalesLine2.SetRange("Document No.", "No."); + SalesLine2.SetRange("Drop Shipment", false); + SalesLine2.SetRange(Type, SalesLine.Type::Item); ++ OnCheckWhseShippingAdviceOnAfterSetLineFilters(SalesLine, SalesHeader); + Result := true; + if SalesLine2.FindSet() then + repeat + Item.Get(SalesLine2."No."); + if SalesLine2.IsShipment() and (Item.Type = Item.Type::Inventory) then begin + QtyToShipBaseTotal += SalesLine2."Qty. to Ship (Base)"; + if SalesLine2."Quantity (Base)" <> + SalesLine2."Qty. to Ship (Base)" + SalesLine2."Qty. Shipped (Base)" + then + Result := false; + end; + until SalesLine2.Next() = 0; + if QtyToShipBaseTotal = 0 then + Result := true; + + OnAfterCheckShippingAdvice(Rec, Result); + if not Result then + Error(ErrorInfo.Create(ShippingAdviceErr, true, Rec)); + end; + + protected procedure GetContactAsCompany(Contact: Record Contact; var SearchContact: Record Contact): Boolean; + var + IsHandled: Boolean; + begin + OnBeforeGetContactAsCompany(Contact, SearchContact, IsHandled); + if not IsHandled then + if Contact."Company No." <> '' then + exit(SearchContact.Get(Contact."Company No.")); + end; +``` + +``` + [IntegrationEvent(false, false)] + internal procedure OnCheckWhseShippingAdviceOnAfterSetLineFilters(var SalesLine: Record "Sales Line"; SalesHeader: Record "Sales Header") + begin + end; +``` + +Regards, +Jason diff --git a/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-30088/README.md b/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-30088/README.md new file mode 100644 index 000000000..1b9cb196f --- /dev/null +++ b/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-30088/README.md @@ -0,0 +1,50 @@ +# Expose CheckWhseRequest() procedure from Report 7323 "Create Invt Put-away/Pick/Mvmt" + +### Why do you need this change? + +We would like to customise Inventory Putaway creation process so would need to call local procedure `CheckWhseRequest()` from outside of "Create Invt Put-away/Pick/Mvmt" report. + +### Describe the request + +Hi Microsoft BC Dev Team, + +Could you expose the `CheckWhseRequest()` in Report 7323 "Create Invt Put-away/Pick/Mvmt" to public? Currently it is set as a local procedure. + +``` + local procedure CheckWhseRequest(var WarehouseRequest: Record "Warehouse Request") SkipRecord: Boolean + var + SalesHeader: Record "Sales Header"; + TransferHeader: Record "Transfer Header"; + GetSrcDocOutbound: Codeunit "Get Source Doc. Outbound"; + IsHandled: Boolean; + begin + IsHandled := false; + OnBeforeCheckWhseRequest(WarehouseRequest, ShowError, SkipRecord, IsHandled); + if IsHandled then + exit(SkipRecord); + if WarehouseRequest."Document Status" <> WarehouseRequest."Document Status"::Released then + SkipRecord := true + else + if (WarehouseRequest.Type = WarehouseRequest.Type::Outbound) and + (WarehouseRequest."Shipping Advice" = WarehouseRequest."Shipping Advice"::Complete) + then + case WarehouseRequest."Source Type" of + Database::"Sales Line": + if WarehouseRequest."Source Subtype" = WarehouseRequest."Source Subtype"::"1" then begin + SkipRecord := not SalesHeader.Get(SalesHeader."Document Type"::Order, WarehouseRequest."Source No."); + if not SkipRecord then + SkipRecord := GetSrcDocOutbound.CheckSalesHeader(SalesHeader, ShowError); + end; + Database::"Transfer Line": + begin + SkipRecord := not TransferHeader.Get(WarehouseRequest."Source No."); + if not SkipRecord then + SkipRecord := GetSrcDocOutbound.CheckTransferHeader(TransferHeader, ShowError); + end; + end; + OnAfterCheckWhseRequest(WarehouseRequest, SkipRecord); + end; +``` + +Regards, +Jason diff --git a/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-30237/README.md b/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-30237/README.md new file mode 100644 index 000000000..a2268f6f2 --- /dev/null +++ b/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-30237/README.md @@ -0,0 +1,19 @@ +# [W1][Report][7304][Get Outbound Source Documents] OnBeforeIsPickToBeMadeForAsmLine event + +### Why do you need this change? + +We need to be able to override the IsPickToBeMadeForAsmLine logic for assembly-to-order lines. +Our extension handles a custom pick scenario where the standard logic incorrectly includes or +excludes Assemble to Order lines. + +### Describe the request + +Report 7304 - Get Outbound Source Documents +Procedure: IsPickToBeMadeForAsmLine + +We need an integration event that's triggered inside this function before the code runs. The function would then Exit(Result) if IsHandled = true. + +[IntegrationEvent(false, false)] +local procedure OnBeforeIsPickToBeMadeForAsmLine(AsmLine: Record "Assembly Line"; var Result: Boolean; var IsHandled: Boolean) +begin +end; diff --git a/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-30241/README.md b/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-30241/README.md new file mode 100644 index 000000000..392d0869d --- /dev/null +++ b/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-30241/README.md @@ -0,0 +1,100 @@ +# [Event Request] Codeunit 80 "Sales-Post" - CreatePrepaymentLines procedure + +### Why do you need this change? + +Dear support, in **codeunit 80 "Sales-Post"** we need to add an event to insert additional records into the `TempPrepmtSalesLine` buffer before moving on to the next `TempSalesLine`. + +The customer had a custom in NAV that inserts additional records into the `TempPrepmtSalesLine` table based on data contained in the `TempSalesLine` table. +The other events won't work because I don't have access to all the necessary variables. + +(I modified the event by adding `NextLineNo` as a paramete passed by reference, I'll need it for the new lines that will be created) + +Another solution could be to add `TempSalesLine` as a parameter to the `OnCreatePrepaymentLinesOnAfterProcessSalesLines` event so that it can loop through the cycle again and execute the custom, but of course this would incur additional computational overhead. + +### Describe the request + + [IntegrationEvent(false, false)] + local procedure OnCreatePrepaymentLinesOnAfterTempPrepmtSalesLineInsertOrModify(var TempPrepmtSalesLine: Record "Sales Line" temporary; SalesHeader: Record "Sales Header"; var TempSalesLine: Record "Sales Line" temporary, var NextLineNo: Integer) + begin + end; + +[Changes between **] + + procedure CreatePrepaymentLines(SalesHeader: Record "Sales Header"; CompleteFunctionality: Boolean) + ... + if TempLineFound then begin + PrepmtAmtToDeduct := + TempPrepmtSalesLine."Prepmt Amt to Deduct" + + InsertedPrepmtVATBaseToDeduct( + SalesHeader, TempSalesLine, TempPrepmtSalesLine."Line No.", TempPrepmtSalesLine."Unit Price"); + VATDifference := TempPrepmtSalesLine."VAT Difference"; + TempPrepmtSalesLine.Validate( + "Unit Price", TempPrepmtSalesLine."Unit Price" + TempSalesLine."Prepmt Amt to Deduct"); + TempPrepmtSalesLine.Validate("VAT Difference", VATDifference - TempSalesLine."Prepmt VAT Diff. to Deduct"); + TempPrepmtSalesLine."Prepmt Amt to Deduct" := PrepmtAmtToDeduct; + if TempSalesLine."Prepayment %" < TempPrepmtSalesLine."Prepayment %" then + TempPrepmtSalesLine."Prepayment %" := TempSalesLine."Prepayment %"; + OnBeforeTempPrepmtSalesLineModify(TempPrepmtSalesLine, TempSalesLine, SalesHeader, CompleteFunctionality); + TempPrepmtSalesLine.Modify(); + end else begin + TempPrepmtSalesLine.Init(); + TempPrepmtSalesLine."Document Type" := SalesHeader."Document Type"; + TempPrepmtSalesLine."Document No." := SalesHeader."No."; + TempPrepmtSalesLine."Line No." := 0; + TempPrepmtSalesLine."System-Created Entry" := true; + OnCreatePrepaymentLinesOnBeforeValidateType(TempPrepmtSalesLine, SalesHeader, TempSalesLine); + if CompleteFunctionality then + TempPrepmtSalesLine.Validate(Type, TempPrepmtSalesLine.Type::"G/L Account") + else + TempPrepmtSalesLine.Type := TempPrepmtSalesLine.Type::"G/L Account"; + // deduct from prepayment + TempPrepmtSalesLine.Validate("No.", GLAcc."No."); + TempPrepmtSalesLine.Validate(Quantity, -1); + TempPrepmtSalesLine."Qty. to Ship" := TempPrepmtSalesLine.Quantity; + TempPrepmtSalesLine."Qty. to Invoice" := TempPrepmtSalesLine.Quantity; + OnCreatePrepaymentLinesOnBeforeInsertedPrepmtVATBaseToDeduct(TempPrepmtSalesLine, SalesHeader, TempSalesLine); + PrepmtAmtToDeduct := InsertedPrepmtVATBaseToDeduct(SalesHeader, TempSalesLine, NextLineNo, 0); + TempPrepmtSalesLine.Validate("Unit Price", TempSalesLine."Prepmt Amt to Deduct"); + TempPrepmtSalesLine.Validate("VAT Difference", -TempSalesLine."Prepmt VAT Diff. to Deduct"); + TempPrepmtSalesLine."Prepmt Amt to Deduct" := PrepmtAmtToDeduct; + TempPrepmtSalesLine."Prepayment %" := TempSalesLine."Prepayment %"; + TempPrepmtSalesLine."Prepayment Line" := true; + TempPrepmtSalesLine."Include in VAT Transac. Rep." := not TempPrepmtSalesLine."Prepayment Line"; + TempPrepmtSalesLine."Shortcut Dimension 1 Code" := TempSalesLine."Shortcut Dimension 1 Code"; + TempPrepmtSalesLine."Shortcut Dimension 2 Code" := TempSalesLine."Shortcut Dimension 2 Code"; + TempPrepmtSalesLine."Dimension Set ID" := TempSalesLine."Dimension Set ID"; + TempPrepmtSalesLine."Line No." := NextLineNo; + NextLineNo := NextLineNo + 10000; + OnBeforeTempPrepmtSalesLineInsert(TempPrepmtSalesLine, TempSalesLine, SalesHeader, CompleteFunctionality); + TempPrepmtSalesLine.Insert(); + + IsHandled := false; + OnBeforeCreatePrepaymentTextLines(TempPrepmtSalesLine, TempSalesLine, SalesHeader, CompleteFunctionality, IsHandled); + if not IsHandled then + TransferExtText.PrepmtGetAnyExtText( + TempPrepmtSalesLine."No.", DATABASE::"Sales Invoice Line", + SalesHeader."Document Date", SalesHeader."Language Code", TempExtTextLine); + if TempExtTextLine.Find('-') then + repeat + TempPrepmtSalesLine.Init(); + TempPrepmtSalesLine.Description := TempExtTextLine.Text; + TempPrepmtSalesLine."System-Created Entry" := true; + TempPrepmtSalesLine."Prepayment Line" := true; + TempPrepmtSalesLine."Line No." := NextLineNo; + NextLineNo := NextLineNo + 10000; + OnCreatePrepaymentLinesOnBeforeInsertTempLineForExtText(TempPrepmtSalesLine, TempSalesLine, TempExtTextLine, SalesHeader); + TempPrepmtSalesLine.Insert(); + until TempExtTextLine.Next() = 0; + end; + ** OnCreatePrepaymentLinesOnAfterTempPrepmtSalesLineInsertOrModify(TempPrepmtSalesLine, SalesHeader, TempSalesLine, NextLineNo); ** + end; + until TempSalesLine.Next() = 0; + OnCreatePrepaymentLinesOnAfterProcessSalesLines(SalesHeader, TempPrepmtSalesLine, NextLineNo); + end; + DividePrepmtAmountLCY(TempPrepmtSalesLine, SalesHeader); + if TempPrepmtSalesLine.FindSet() then + repeat + TempSalesLineGlobal := TempPrepmtSalesLine; + TempSalesLineGlobal.Insert(); + until TempPrepmtSalesLine.Next() = 0; + end; diff --git a/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-30252/README.md b/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-30252/README.md new file mode 100644 index 000000000..777ccb93d --- /dev/null +++ b/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-30252/README.md @@ -0,0 +1,82 @@ +# [Event Request] codeunit 333 "Req. Wksh.-Make Order" - TryCarryOutReqLineAction procedure + +### Why do you need this change? + +Dear support, in codeunit **333 "Req. Wksh.-Make Order"** we need two events: one to set additional parameters before calling `ReqWkshMakeOrders.Run(ReqLine)`, and the second to retrieve the parameter values after the call. + +I added `IsHandled` in the first event just in case someone wanted to handle the call differently, but for my purposes it isn't really necessary. + +Inserting the event before `ReqWkshMakeOrders.Run(ReqLine)` is just a matter of order; in fact, `OnBeforeTryCarryOutReqLineAction` would work, but it's missing the `ReqWkshMakeOrders` parameter, so I wouldn't be able to perform the operations there. + +### Describe the request + + [IntegrationEvent(false, false)] + local procedure OnTryCarryOutReqLineActionOnBeforeRun(var ReqWkshMakeOrders: Codeunit "Req. Wksh.-Make Order"; var ReqLine: Record "Requisition Line"; var IsHandled: Boolean; var Result: Boolean) + begin + end; + + [IntegrationEvent(false, false)] + local procedure OnTryCarryOutReqLineActionOnAfterGetTryParam(var ReqWkshMakeOrders: Codeunit "Req. Wksh.-Make Order") + begin + end; + +[Changes between **] + + local procedure TryCarryOutReqLineAction(var ReqLine: Record "Requisition Line"): Boolean + var + ** + IsHandled: Boolean; + Result: Boolean; + ** + begin + OnBeforeTryCarryOutReqLineAction(ReqLine); + + ReqWkshMakeOrders.Set(PurchOrderHeader, EndOrderDate, PrintPurchOrders); + ReqWkshMakeOrders.SetTryParam( + ReqTemplate, + LineCount, + NextLineNo, + PrevPurchCode, + PrevShipToCode, + PrevLocationCode, + OrderCounter, + OrderLineCounter, + TempFailedReqLine, + TempDocumentEntry); + ReqWkshMakeOrders.SetSuppressCommit(SuppressCommit); + ** + IsHandled := false; + Result := false; + OnTryCarryOutReqLineActionOnBeforeRun(ReqWkshMakeOrders, ReqLine, IsHandled, Result); + if IsHandled then + exit(Result); + ** + if ReqWkshMakeOrders.Run(ReqLine) then begin + ReqWkshMakeOrders.GetTryParam( + PurchOrderHeader, + LineCount, + NextLineNo, + PrevPurchCode, + PrevShipToCode, + PrevLocationCode, + OrderCounter, + OrderLineCounter); + + ** OnTryCarryOutReqLineActionOnAfterGetTryParam(ReqWkshMakeOrders); ** + + if PrintPurchOrders and PlanningResiliency then + if PurchOrderHeader."No." <> '' then + if not TempPurchaseOrderToPrint.Get(PurchOrderHeader."Document Type", PurchOrderHeader."No.") then begin + TempPurchaseOrderToPrint := PurchOrderHeader; + TempPurchaseOrderToPrint.Insert(); + end; + + if not HideProgressWindow then begin + Window.Update(3, OrderCounter); + Window.Update(4, LineCount); + Window.Update(5, OrderLineCounter); + end; + exit(true); + end; + exit(false) + end; diff --git a/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-30253/README.md b/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-30253/README.md new file mode 100644 index 000000000..fc9fcf167 --- /dev/null +++ b/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-30253/README.md @@ -0,0 +1,60 @@ +# [Event Request] codeunit 5763 "Whse.-Post Shipment" - PostUpdateWhseDocuments procedure + +### Why do you need this change? + +Dear support, In codeunit **5763 "Whse.-Post Shipment"**, we need an event that allows us to modify the filters for _WhseShptLine2_ and handle the underlying if statement, one of our clients had an implementation for this in Navision and we need to replicate it in BC. + +### Describe the request + + [IntegrationEvent(false, false)] + local procedure OnPostUpdateWhseDocumentsOnAfterWhseShptLineSetFilters(var WhseShptLine2: Record "Warehouse Shipment Line"; var WhsePostParameters: Record "Whse. Post Parameters") + begin + end; + +[Changes between **] + + procedure PostUpdateWhseDocuments(var WhseShptHeaderParam: Record "Warehouse Shipment Header") + var + WhseShptLine2: Record "Warehouse Shipment Line"; + DeleteWhseShptLine: Boolean; + begin + OnBeforePostUpdateWhseDocuments(WhseShptHeaderParam, TempWarehouseShipmentLine); + if TempWarehouseShipmentLine.Find('-') then begin + repeat + WhseShptLine2.Get(TempWarehouseShipmentLine."No.", TempWarehouseShipmentLine."Line No."); + DeleteWhseShptLine := TempWarehouseShipmentLine."Qty. Outstanding" = TempWarehouseShipmentLine."Qty. to Ship"; + OnBeforeDeleteUpdateWhseShptLine(WhseShptLine2, DeleteWhseShptLine, TempWarehouseShipmentLine); + if DeleteWhseShptLine then begin + ItemTrackingMgt.SetDeleteReservationEntries(true); + ItemTrackingMgt.DeleteWhseItemTrkgLines( + Database::"Warehouse Shipment Line", 0, TempWarehouseShipmentLine."No.", '', 0, TempWarehouseShipmentLine."Line No.", TempWarehouseShipmentLine."Location Code", true); + WhseShptLine2.Delete(); + OnPostUpdateWhseDocumentsOnAfterWhseShptLine2Delete(WhseShptLine2); + end else + UpdateWhseShptLine(WhseShptLine2, WhseShptHeaderParam); + until TempWarehouseShipmentLine.Next() = 0; + TempWarehouseShipmentLine.DeleteAll(); + + OnPostUpdateWhseDocumentsOnAfterWhseShptLineBufLoop(WhseShptHeaderParam, WhseShptLine2, TempWarehouseShipmentLine); + end; + + OnPostUpdateWhseDocumentsOnBeforeUpdateWhseShptHeader(WhseShptHeaderParam); + + WhseShptLine2.SetRange("No.", WhseShptHeaderParam."No."); + ** OnPostUpdateWhseDocumentsOnAfterWhseShptLineSetFilters(WhseShptLine2, WhseShptHeaderParam); ** + if WhseShptLine2.IsEmpty() then begin + WhseShptHeaderParam.DeleteRelatedLines(); + WhseShptHeaderParam.Delete(); + end else begin + WhseShptHeaderParam."Document Status" := WhseShptHeaderParam.GetShipmentStatus(0); + if WhseShptHeaderParam."Create Posted Header" then begin + WhseShptHeaderParam."Last Shipping No." := WhseShptHeaderParam."Shipping No."; + WhseShptHeaderParam."Shipping No." := ''; + WhseShptHeaderParam."Create Posted Header" := false; + end; + OnPostUpdateWhseDocumentsOnBeforeWhseShptHeaderParamModify(WhseShptHeaderParam, WhseShptHeader); + WhseShptHeaderParam.Modify(); + end; + + OnAfterPostUpdateWhseDocuments(WhseShptHeaderParam); + end; diff --git a/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-30258/README.md b/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-30258/README.md new file mode 100644 index 000000000..af013f75e --- /dev/null +++ b/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-30258/README.md @@ -0,0 +1,27 @@ +# [Event Request] codeunit 905 "Assembly Line Management" procedure ShowAvailability() + +### Why do you need this change? + +In certain circumstances I want to be able to either skip showing the availability page when the QtyAvailToLow is true and/or the ShowPageEvenIfEnoughComponentsAvailable is true. In other circumstances I want to show an error when the QtyAvailToLow is true and/or the ShowPageEvenIfEnoughComponentsAvailable is true. + +I've tried using the OnBeforeShowAvailability() event at the start but can't achieve what I want because I would need to call the CopyInventoriableItemAsmLines and AvailToPromise procedures in order to calculate QtyAvailTooLow, but they are currently local. I have also tried replicating them but I can't because AvailToPromise calls other procedures which are local. + + +### Describe the request + +Please can you add the following event/code after the QtyAvailTooLow boolean field has been set... + +``` +OnAfterQtyAvailTooLowCalculated(TempAssemblyHeader, TempAssemblyLine, ShowPageEvenIfEnoughComponentsAvailable, IsHandled, Rollback, WarningModeOff); +if IsHandled then + exit(Rollback); + +``` +The event publisher would be... + +``` +[IntegrationEvent(false, false)] +local procedure OnAfterQtyAvailTooLowCalculated(var TempAssemblyHeader: Record "Assembly Header" temporary; var TempAssemblyLine: Record "Assembly Line" temporary; ShowPageEvenIfEnoughComponentsAvailable: Boolean; var IsHandled: Boolean; var RollBack: Boolean; WarningModeOff: Boolean) +begin +end; +``` diff --git a/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-30278/README.md b/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-30278/README.md new file mode 100644 index 000000000..3037e1adb --- /dev/null +++ b/dataset/problemstatement/microsoftInternal__NAV-Ext_Request_Impl-30278/README.md @@ -0,0 +1,105 @@ +# [Extensibility Request] codeunit 5813 "Undo Purchase Receipt Line" add event OnBeforeFindPostedWhseRcptLine + +### Why do you need this change? + +In 4PS Construct, we need to extend the undo purchase receipt flow in local procedure "Code" so that the decision to call WhseUndoQty.FindPostedWhseRcptLine can depend not only on Type = Item, but also on additional line-specific conditions such as whether the field "Job No." is empty. + +In our scenario, the standard condition is too restrictive because it only checks whether PurchRcptLine.Type = PurchRcptLine.Type::Item. For our customization, this causes the warehouse receipt lookup to run in cases where it should be skipped. + +We need to control that decision before WhseUndoQty.FindPostedWhseRcptLine is called, because that choice affects the remainder of the line processing, including whether PostItemJnlLine is executed in that branch or whether DocLineNo is assigned through GetCorrectionLineNo(PurchRcptLine). + +There is already an existing event in WhseUndoQuantity.Codeunit.al named OnBeforeFindPostedWhseRcptLine, but it is not sufficient for this scenario. That event is raised inside FindPostedWhseRcptLine after the standard caller has already decided to enter that path, and it does not provide PurchRcptLine. Because of that, it cannot be used to evaluate our custom condition before the branch is chosen. + +We understand that the requested event would be raised inside the repeat..until loop in local procedure "Code". In our view, this is necessary because the decision is line-specific and must be evaluated for each PurchRcptLine individually. + +This feature was previously requested https://github.com/microsoft/ALAppExtensions/issues/29910 but was closed due to inactivity. + +### Describe the request + +On behalf of 4PS, I would like to request to add integration event OnBeforeFindPostedWhseRcptLine before WhseUndoQty.FindPostedWhseRcptLine invoke and ShouldFindPostedWhseRcptLine boolean to be able change condition related to our customization. + + local procedure "Code"() + var + PostedWhseRcptLine: Record "Posted Whse. Receipt Line"; + PurchLine: Record "Purchase Line"; + Window: Dialog; + ItemRcptEntryNo: Integer; + DocLineNo: Integer; + PostedWhseRcptLineFound: Boolean; + ShouldFindPostedWhseRcptLine: Boolean; //new + begin + OnBeforeCode(PurchRcptLine, UndoPostingMgt); + + CheckPurchRcptLines(PurchRcptLine, Window); + + BindSubscription(this); + PurchRcptLine.Find('-'); + OnCodeOnBeforeLoopPurchRcptLine(PurchRcptLine); + repeat + TempGlobalItemLedgEntry.Reset(); + if not TempGlobalItemLedgEntry.IsEmpty() then + TempGlobalItemLedgEntry.DeleteAll(); + TempGlobalItemEntryRelation.Reset(); + if not TempGlobalItemEntryRelation.IsEmpty() then + TempGlobalItemEntryRelation.DeleteAll(); + + if not HideDialog then + Window.Open(Text001); + + ShouldFindPostedWhseRcptLine := PurchRcptLine.Type = PurchRcptLine.Type::Item; //new + OnBeforeFindPostedWhseRcptLine(PurchRcptLine, ShouldFindPostedWhseRcptLine); //new + if ShouldFindPostedWhseRcptLine then begin //new + PostedWhseRcptLineFound := + WhseUndoQty.FindPostedWhseRcptLine( + PostedWhseRcptLine, + DATABASE::"Purch. Rcpt. Line", + PurchRcptLine."Document No.", + DATABASE::"Purchase Line", + PurchLine."Document Type"::Order.AsInteger(), + PurchRcptLine."Order No.", + PurchRcptLine."Order Line No."); + + ItemRcptEntryNo := PostItemJnlLine(PurchRcptLine, DocLineNo); + end else + DocLineNo := GetCorrectionLineNo(PurchRcptLine); + + InsertNewReceiptLine(PurchRcptLine, ItemRcptEntryNo, DocLineNo); + OnAfterInsertNewReceiptLine(PurchRcptLine, PostedWhseRcptLine, PostedWhseRcptLineFound, DocLineNo, PostedWhseRcptLine); + + if PostedWhseRcptLineFound then + WhseUndoQty.UndoPostedWhseRcptLine(PostedWhseRcptLine); + + UpdateOrderLine(PurchRcptLine); + if PostedWhseRcptLineFound then + WhseUndoQty.UpdateRcptSourceDocLines(PostedWhseRcptLine); + + if (PurchRcptLine."Blanket Order No." <> '') and (PurchRcptLine."Blanket Order Line No." <> 0) then + UpdateBlanketOrder(PurchRcptLine); + + PurchRcptLine."Quantity Invoiced" := PurchRcptLine.Quantity; + PurchRcptLine."Qty. Invoiced (Base)" := PurchRcptLine."Quantity (Base)"; + PurchRcptLine."Qty. Rcd. Not Invoiced" := 0; + PurchRcptLine.Correction := true; + + OnBeforePurchRcptLineModify(PurchRcptLine, TempWhseJnlLine); + PurchRcptLine.Modify(); + OnAfterPurchRcptLineModify(PurchRcptLine, TempWhseJnlLine, DocLineNo, UndoPostingMgt); + + if not JobItem then + JobItem := (PurchRcptLine.Type = PurchRcptLine.Type::Item) and (PurchRcptLine."Job No." <> ''); + until PurchRcptLine.Next() = 0; + UnbindSubscription(this); + + OnCodeOnBeforeMakeInventoryAdjustment(PurchLine, PurchRcptLine); + MakeInventoryAdjustment(); + + WhseUndoQty.PostTempWhseJnlLine(TempWhseJnlLine); + + OnAfterCode(PurchRcptLine, UndoPostingMgt); + end; + + + [IntegrationEvent(false, false)] + local procedure OnBeforeFindPostedWhseRcptLine(PurchRcptLine: Record "Purch. Rcpt. Line"; var ShouldFindPostedWhseRcptLine: Boolean) + begin + end; diff --git a/src/bcbench/agent/shared/config.yaml b/src/bcbench/agent/shared/config.yaml index 0e540a45c..65f0a0015 100644 --- a/src/bcbench/agent/shared/config.yaml +++ b/src/bcbench/agent/shared/config.yaml @@ -119,7 +119,7 @@ prompt: # NOTE: the canonical source file is AGENTS.md; it is automatically renamed # to the agent-specific filename (AgentHarness.instruction_filename) during setup instructions: - enabled: false + enabled: true # controls: # 1. whether to copy skills from `src/bcbench/agent/shared/instructions//skills/` @@ -134,8 +134,8 @@ skills: # - Claude: copies to repo/.claude/agents/ # 2. whether to pass --agent= to copilot or claude agents: - enabled: false - name: ALTest + enabled: true + name: extensibility-request-triage # controls loading agent plugins for the run, only enabled entries are validated and loaded. # Each plugin gets its own entry, and is passed to the CLI via `--plugin-dir` (session-scoped). diff --git a/src/bcbench/agent/shared/instructions/microsoftInternal-NAV/instructions/extensibility-request-triage/comment-templates/comment_templates.yaml b/src/bcbench/agent/shared/instructions/microsoftInternal-NAV/instructions/extensibility-request-triage/comment-templates/comment_templates.yaml index a4204493d..4687d3aab 100644 --- a/src/bcbench/agent/shared/instructions/microsoftInternal-NAV/instructions/extensibility-request-triage/comment-templates/comment_templates.yaml +++ b/src/bcbench/agent/shared/instructions/microsoftInternal-NAV/instructions/extensibility-request-triage/comment-templates/comment_templates.yaml @@ -427,6 +427,24 @@ comment_templates: No recent activity, so this issue will now be closed. If you still need this request, please create a new issue and include the required updated information. + # ============================================================================= + # REQUESTER-CONFIRMED CLOSURE COMMENT + # ============================================================================= + + requester_confirmed_closure: + description: "Posted when the requester accepts an existing solution or confirms that the request is withdrawn or cancelled" + applies_to: ["all"] + template: | + Thanks for confirming! + + {closure_explanation} + + Closing this issue because no additional extensibility change is needed. + + placeholders: + closure_explanation: + description: "The actual closure reason. For an accepted solution, include its name and any known signature and file details. For a withdrawal or cancellation, acknowledge it directly." + # ============================================================================= # BCAPPS REDIRECT COMMENT # ============================================================================= diff --git a/src/bcbench/agent/shared/instructions/microsoftInternal-NAV/instructions/extensibility-request-triage/step2-eligibility-check.md b/src/bcbench/agent/shared/instructions/microsoftInternal-NAV/instructions/extensibility-request-triage/step2-eligibility-check.md index 9f44ac974..04693d71b 100644 --- a/src/bcbench/agent/shared/instructions/microsoftInternal-NAV/instructions/extensibility-request-triage/step2-eligibility-check.md +++ b/src/bcbench/agent/shared/instructions/microsoftInternal-NAV/instructions/extensibility-request-triage/step2-eligibility-check.md @@ -13,14 +13,14 @@ the thread content only. 2. Request type is `Task`. 3. Labels are empty OR only `missing-info` is set. 4. **Content Appropriateness**: body and comments must not contain inappropriate, offensive, or abusive content. -5. **Author Withdrawal**: the most recent comment must not indicate the request is being withdrawn or cancelled (e.g., phrases like "withdraw", "cancel", "no longer needed", "closing this", "nevermind"). Also treat as withdrawal when the author confirms that an alternative approach suggested by the agent satisfies their need and they explicitly state they no longer need the original request (e.g., "this alternative works for me", "I no longer need the original approach", "thank you for the change"). If withdrawn, set `FailureLabel: "close"` — no further processing needed. +5. **Requester-Confirmed Closure**: the most recent comment must not indicate that no new change is needed because the requester withdrew or cancelled the request (e.g., "withdraw", "cancel", "no longer needed", "closing this", "nevermind") or accepted an existing solution or alternative suggested by the agent (e.g., "this alternative works for me", "I can use this event", "thank you for the change"). Set `FailureLabel: "close"` and preserve the actual reason in `FailureReason`. When an existing solution was accepted, include its name and any signature or file details already present in the thread. Do not describe requester-confirmed closure as stale or inactive. **Outcomes:** | Condition | IsEligible | FailureLabel | |-----------|-----------|--------------| | All checks pass | true | `""` | -| Author withdrawal detected | false | `"close"` | +| Requester-confirmed closure detected | false | `"close"` | | Check 4 fails (inappropriate content) | false | `"agent-not-processable"` | | Any other failure | false | `"do-nothing"` | diff --git a/src/bcbench/agent/shared/instructions/microsoftInternal-NAV/instructions/extensibility-request-triage/step5-codebase-analysis.md b/src/bcbench/agent/shared/instructions/microsoftInternal-NAV/instructions/extensibility-request-triage/step5-codebase-analysis.md index 996257a53..b236a1a59 100644 --- a/src/bcbench/agent/shared/instructions/microsoftInternal-NAV/instructions/extensibility-request-triage/step5-codebase-analysis.md +++ b/src/bcbench/agent/shared/instructions/microsoftInternal-NAV/instructions/extensibility-request-triage/step5-codebase-analysis.md @@ -46,15 +46,15 @@ collect the following files in order, skipping any that do not exist, and assemb 6. **Expand Context — follow the call graph when it matters.** Use judgment to decide whether reading related files (callers/callees) would change feasibility or rule evaluation. Find callers with a scoped `grep` for the procedure name under `CODE_ROOT`; find callees from the calls in the already-read file, then `glob`/`read` those objects selectively. Limit depth to what is directly relevant — stop when you have enough context. -7. **Progressive Rule Evaluation:** Apply the assembled `RULES` in order against the full file content. Short-circuit on the first blocker. +7. **Progressive Rule Evaluation:** Apply the assembled `RULES` in order to the requested change, using the full file content only as context. A rule must NOT be raised solely because its condition already exists in the source. Rules that explicitly evaluate existing implementation, nearby alternatives, or target-source state may use the source condition they name. Short-circuit on the first blocker. 8. **Evaluate Rules:** - **`blockers`** — stop on first match; outcome: `auto-reject` - **`alternative_suggestions`** — if any match; outcome: `missing-info` - - **`warnings`** — if any rule condition matches in code; outcome: `missing-info` + - **`warnings`** — if the requested change triggers any rule condition; outcome: `missing-info` - **`implementation`** — only if nothing matched above; generate `SUGGESTED_IMPLEMENTATION` - **Important:** For `warnings`, do not override the rule with personal judgment. If the condition matches, flag it unless the author already addressed it in comments. + **Important:** For `warnings`, do not override the rule with personal judgment. If the requested change triggers the condition, flag it unless the author already addressed it in comments. **`SUGGESTED_IMPLEMENTATION` format:** Produce an AL code snippet — not prose — showing exactly what to add or change. Include 3–5 lines of unchanged surrounding code before and after the insertion point so a developer can locate the exact position. Mark each newly added implementation line with `// NEW`. If a new publisher procedure is added, include its full definition at the end of the snippet, but do **not** mark the event signature line itself with `// NEW`. diff --git a/src/bcbench/agent/shared/instructions/microsoftInternal-NAV/instructions/extensibility-request-triage/step7-labels-comments.md b/src/bcbench/agent/shared/instructions/microsoftInternal-NAV/instructions/extensibility-request-triage/step7-labels-comments.md index b76cf4a46..7c45b65dd 100644 --- a/src/bcbench/agent/shared/instructions/microsoftInternal-NAV/instructions/extensibility-request-triage/step7-labels-comments.md +++ b/src/bcbench/agent/shared/instructions/microsoftInternal-NAV/instructions/extensibility-request-triage/step7-labels-comments.md @@ -20,10 +20,14 @@ JSON only — nothing is posted, labelled, or closed on any server. A human revi | `FailureLabel: "agent-not-processable"` | `["agent-not-processable"]` | (none) | open | | Auto-reject (blocker) | `[]` | `rejected_request` | closed | | Already implemented | `[]` | `already_implemented` | closed | -| `FailureLabel: "close"` and reason is stale/inactive/withdrawn | `["missing-info"]` | `stale_issue_closure` | closed | +| `FailureLabel: "close"` and reason is stale/inactive | `["missing-info"]` | `stale_issue_closure` | closed | +| `FailureLabel: "close"` and requester confirmed no new change is needed (accepted an existing solution or alternative, withdrew, or cancelled) | `[]` | `requester_confirmed_closure` | closed | | `FailureLabel: "close"` and any other rejection reason | `[]` | `rejected_request` | closed | | `FailureLabel: "do-nothing"` | (none) | (none) | (no change) | +Set `labels_to_set` exactly as defined by the matching row in the decision table, using only +labels produced by previous steps. Do not add, infer, rename, or substitute any labels. + Fill the chosen template from `TRIAGE_ROOT/comment-templates/comment_templates.yaml` (`TRIAGE_ROOT = .github/instructions/extensibility-request-triage`) using the workflow state (team, type, missing items, suggested implementation, rejection reason). If no exact