从业务中的列表部分创建项目时自动设置父 ID Central/AL
Automatically setting parent id when creating item from list part in Business Central/AL
我对使用 AL for Business Central 构建扩展还很陌生。我正在尝试为学校申请设置扩展。我构建的 tables 工作,它们遵循这个数据模型:
School - Course - Lecture
| /
Teacher
在 School
的 Card
中,我显示了 Course
的列表部分。它正确地显示了给定学校的所有课程。到目前为止,一切都很好。但是现在,每当我从此视图创建 Course
时,我都必须记住手动设置 SchoolId
,但我想自动执行此操作,因为我们已经知道我们是哪个 School
英寸
Course
table 看起来像这样:
table 50110 Course
{
DataClassification = ToBeClassified;
DrillDownPageId = "Course List";
LookupPageId = "Course List";
fields
{
field(1; "No."; Code[20])
...
field(5; "SchoolId"; Code[20])
{
DataClassification = ToBeClassified;
TableRelation = School."No.";
}
}
keys
{
key(PK; "No.")
{
Clustered = true;
}
}
}
Course
列表部分明确不包含 SchoolId
,因为我们希望这是自动管理的:
page 50118 "Course List Part"
{
PageType = ListPart;
UsageCategory = None;
SourceTable = Course;
CardPageId = "Course Card";
// InsertAllowed = false;
layout
{
area(Content)
{
repeater(GroupName)
{
field("No."; "No.") { ApplicationArea = All; }
field(Name; Name) { ApplicationArea = All; }
field(CourseOwnerId; CourseOwnerId) { ApplicationArea = All; }
// field(SchoolId; SchoolId) { ApplicationArea = All; }
}
}
}
}
School
卡片在适当的视图上调用 Course list part
:
page 50117 "School Card"
{
PageType = Card;
UsageCategory = None;
SourceTable = School;
layout
{
area(Content)
{
group(General)
{
field("No."; "No.")
{
ApplicationArea = All;
}
field(Name; Name)
{
ApplicationArea = All;
}
}
group("Extras 1")
{
part("Courses"; "Course List Part")
{
ApplicationArea = All;
SubPageLink = SchoolId = field("No.");
UpdatePropagation = Both;
}
}
}
}
}
当然还有School
table,其中No.
属性设置为主键:
table 50113 School
{
DataClassification = ToBeClassified;
DrillDownPageId = "School List";
LookupPageId = "School List";
fields
{
field(1; "No."; Code[20])
{
DataClassification = ToBeClassified;
}
...
}
keys
{
key(PK; "No.")
{
Clustered = true;
}
}
}
还是不行。
当您将 'Course' 页面添加到 'School page' 时,子页面 link 会自动为您处理这部分关系;当您插入一条新记录时,它会自动用 'SchoolId' 填充编号。
例如这就是它在“销售订单”页面上的工作方式。
part(SalesLines; "Sales Order Subform")
{
ApplicationArea = Basic, Suite;
Editable = DynamicEditable;
Enabled = "Sell-to Customer No." <> '';
SubPageLink = "Document No." = FIELD("No.");
UpdatePropagation = Both;
}
您还必须定义从 'Child' table 到 'Parent' table 的 table 关系,例如
table 50121 child
{
fields
{
field(1; ParentID; Integer)
{
TableRelation = Parent.ID;
您 link 所在的字段必须是子 table 的主键,即 'SchoolID' 必须在 'course' 在你的代码中。
我对使用 AL for Business Central 构建扩展还很陌生。我正在尝试为学校申请设置扩展。我构建的 tables 工作,它们遵循这个数据模型:
School - Course - Lecture
| /
Teacher
在 School
的 Card
中,我显示了 Course
的列表部分。它正确地显示了给定学校的所有课程。到目前为止,一切都很好。但是现在,每当我从此视图创建 Course
时,我都必须记住手动设置 SchoolId
,但我想自动执行此操作,因为我们已经知道我们是哪个 School
英寸
Course
table 看起来像这样:
table 50110 Course
{
DataClassification = ToBeClassified;
DrillDownPageId = "Course List";
LookupPageId = "Course List";
fields
{
field(1; "No."; Code[20])
...
field(5; "SchoolId"; Code[20])
{
DataClassification = ToBeClassified;
TableRelation = School."No.";
}
}
keys
{
key(PK; "No.")
{
Clustered = true;
}
}
}
Course
列表部分明确不包含 SchoolId
,因为我们希望这是自动管理的:
page 50118 "Course List Part"
{
PageType = ListPart;
UsageCategory = None;
SourceTable = Course;
CardPageId = "Course Card";
// InsertAllowed = false;
layout
{
area(Content)
{
repeater(GroupName)
{
field("No."; "No.") { ApplicationArea = All; }
field(Name; Name) { ApplicationArea = All; }
field(CourseOwnerId; CourseOwnerId) { ApplicationArea = All; }
// field(SchoolId; SchoolId) { ApplicationArea = All; }
}
}
}
}
School
卡片在适当的视图上调用 Course list part
:
page 50117 "School Card"
{
PageType = Card;
UsageCategory = None;
SourceTable = School;
layout
{
area(Content)
{
group(General)
{
field("No."; "No.")
{
ApplicationArea = All;
}
field(Name; Name)
{
ApplicationArea = All;
}
}
group("Extras 1")
{
part("Courses"; "Course List Part")
{
ApplicationArea = All;
SubPageLink = SchoolId = field("No.");
UpdatePropagation = Both;
}
}
}
}
}
当然还有School
table,其中No.
属性设置为主键:
table 50113 School
{
DataClassification = ToBeClassified;
DrillDownPageId = "School List";
LookupPageId = "School List";
fields
{
field(1; "No."; Code[20])
{
DataClassification = ToBeClassified;
}
...
}
keys
{
key(PK; "No.")
{
Clustered = true;
}
}
}
还是不行。
当您将 'Course' 页面添加到 'School page' 时,子页面 link 会自动为您处理这部分关系;当您插入一条新记录时,它会自动用 'SchoolId' 填充编号。
例如这就是它在“销售订单”页面上的工作方式。
part(SalesLines; "Sales Order Subform")
{
ApplicationArea = Basic, Suite;
Editable = DynamicEditable;
Enabled = "Sell-to Customer No." <> '';
SubPageLink = "Document No." = FIELD("No.");
UpdatePropagation = Both;
}
您还必须定义从 'Child' table 到 'Parent' table 的 table 关系,例如
table 50121 child
{
fields
{
field(1; ParentID; Integer)
{
TableRelation = Parent.ID;
您 link 所在的字段必须是子 table 的主键,即 'SchoolID' 必须在 'course' 在你的代码中。