从业务中的列表部分创建项目时自动设置父 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

SchoolCard 中,我显示了 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;
                }
            }
        }
    }
}

当然还有Schooltable,其中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' 在你的代码中。