Give the table-relation-test fixtures a real relation to exclude and one to protect

The "Category Code" field had no TableRelation at all, so the good
subscriber's RemoveTableRelation call targeted metadata that never
existed - a no-op. Added a real TableRelation to "Sample Setup" on
that field (the one known exception to exclude) and a second,
ordinary self-referencing relation ("Parent No." -> "Sample
Header"."No.") with no exception. The good fixture now removes only
the first; the bad fixture's table-wide removal (field/related
table/field all 0) now demonstrably also strips the second, showing
the actual anti-pattern instead of removing nothing meaningful.
This commit is contained in:
Michael Dieringer 2026-09-22 20:59:56 +02:00
parent e3d9b8eb25
commit 89f648928f
2 changed files with 28 additions and 6 deletions

View file

@ -16,7 +16,14 @@ table 50145 "Sample Header"
fields fields
{ {
field(1; "No."; Code[20]) { } field(1; "No."; Code[20]) { }
field(10; "Category Code"; Code[20]) { } field(10; "Category Code"; Code[10])
{
TableRelation = "Sample Setup"."Primary Key";
}
field(11; "Parent No."; Code[20])
{
TableRelation = "Sample Header"."No.";
}
} }
keys keys
{ {
@ -31,7 +38,10 @@ codeunit 50141 "Sample Table Relation Test Ext"
var var
TableRelationTest: Codeunit "Table Relation Test"; TableRelationTest: Codeunit "Table Relation Test";
begin begin
// Removes every relation on the whole table, not just the one known exception // Removes every relation on the whole table (field/related table/
// related field all 0), not just the one known exception - this
// also strips "Parent No." -> "Sample Header"."No.", which had no
// exception and should have stayed covered by the standard test.
TableRelationTest.RemoveTableRelation(TableRelationsMetadata, Database::"Sample Header", 0, 0, 0); TableRelationTest.RemoveTableRelation(TableRelationsMetadata, Database::"Sample Header", 0, 0, 0);
end; end;
} }

View file

@ -16,10 +16,20 @@ table 50145 "Sample Header"
fields fields
{ {
field(1; "No."; Code[20]) { } field(1; "No."; Code[20]) { }
// A known exception: this field is allowed to reference "Sample // A known exception: "Category Code" predates "Sample Setup" and
// Setup" loosely (no TableRelation enforced here on purpose), so // can carry a value that no longer resolves to a real row there,
// the standard Table Relation Test would otherwise reject it. // so the standard Table Relation Test would otherwise reject it -
field(10; "Category Code"; Code[20]) { } // excluded via OnAfterRemoveTableRelation below.
field(10; "Category Code"; Code[10])
{
TableRelation = "Sample Setup"."Primary Key";
}
// An ordinary relation with no exception - ExcludeSampleFieldFrom
// TableRelationTest below must leave this one checked.
field(11; "Parent No."; Code[20])
{
TableRelation = "Sample Header"."No.";
}
} }
keys keys
{ {
@ -34,6 +44,8 @@ codeunit 50141 "Sample Table Relation Test Ext"
var var
TableRelationTest: Codeunit "Table Relation Test"; TableRelationTest: Codeunit "Table Relation Test";
begin begin
// Removes only the one known exception. "Parent No." -> "Sample
// Header"."No." is untouched and stays covered by the standard test.
TableRelationTest.RemoveTableRelation(TableRelationsMetadata, Database::"Sample Header", 10, Database::"Sample Setup", 1); TableRelationTest.RemoveTableRelation(TableRelationsMetadata, Database::"Sample Header", 10, Database::"Sample Setup", 1);
end; end;
} }