1

我正在研究概念验证。我创建了一个新的 AL 项目,其中包含一个简单的 ListPart,其中销售发票行作为其源表。但我需要添加不属于源表但属于其相关实体的属性。

我的代码如下所示:

page 50107 CustomInvoicePage
{
   PageType = ListPart;
   SourceTable = "Sales Invoice Line";
   Caption = 'Custom Sales Inovice Line';
   Editable = true;
   UsageCategory = Lists;
   ApplicationArea = All;

   layout
   {
      area(content)
      {
          repeater(Group)
          {
              field("Invoice Name"; "No.")
              {
                  ApplicationArea = All;
                  Caption = 'Invoice Name';
              }
              field("Invoice Date"; "Posting Date")
              {
                  ApplicationArea = All;
                  Caption = 'Invoice Date';
              }
              field("Product Name"; Description)
              {
                  ApplicationArea = All;
                  TableRelation = Item.Description;
                  Caption = 'Product Name';
              }
              field("Product Amount"; Amount)
              {
                  ApplicationArea = All;
                  Caption = 'Product Amount';
              }
              field("Unit Cost"; "Unit Cost")
              {
                  ApplicationArea = All;
                  Caption = 'Unit Cost';
              }
              field("Product Gross Weight"; "Gross Weight")
              {
                  ApplicationArea = All;
                  Caption = 'Product Gross Weight';
              }
              field("Sell-to Customer No."; "Sell-to Customer No.")
              {
                  ApplicationArea = All;
                  TableRelation = Customer."No.";
              }
          }
      }
   }
 }

我尝试用显示来自另一个实体的属性的表关系覆盖字段中的表达式。例如,使用项目耐用性覆盖销售发票行中的项目编号属性。但这不起作用,它仍然向我显示列中的项目编号。

有没有一种方法可以使用从相关实体到销售发票行的参数,例如在销售发票行属性中未显示的项目实体的属性,而无需使用新字段扩展销售发票行表?

4

1 回答 1

0

首先,我想指出,针对您的问题的最佳解决方案是为您创建一个tableextension必填Sales Invoice Line字段为 的位置FlowFields,然后将其添加到您的页面中。它需要更少的代码,并且可以为您节省大量对数据库的调用。

忽略这个建议,您可以通过将全局变量添加Item到您的页面来解决您的问题,然后创建一个使用该变量作为数据源的字段。

您还需要检索 和 中的OnAfterGetRecord记录OnAfterGetCurrRecord

这是一个例子:

page 50107 CustomInvoicePage
{
    PageType = ListPart;
    SourceTable = "Sales Invoice Line";
    Caption = 'Custom Sales Inovice Line';
    Editable = true;
    UsageCategory = Lists;
    ApplicationArea = All;

    layout
    {
        area(content)
        {
            repeater(Group)
            {
                field("Item Durability"; Item.Durability)
                {
                    ApplicationArea = All;
                    Caption = 'Item Durability';
                }
            }
        }
    }

    trigger OnAfterGetRecord()
    begin
        GetItem();
    end;

    trigger OnAfterGetCurrRecord()
    begin
        GetItem();
    end;

    local procedure GetItem()
    begin
        // We need to do it this way, because not all Sales Invoice Lines are Item lines.
        if not Item.Get("No.") then
            Item.Init();
    end;

    var
        Item: Record Item;
}

请注意,使用此方法时,如果输入新值,则在这种情况下,源记录不会更改 Item。这也需要用代码来处理。

奖励信息:无法编辑 的页面,Sales Invoice Line因为不允许编辑已发布的文档。SourceTable如果这真的是你想要的,你需要在Permissions你的页面上修改Sales Invoice Line.

Permissions = tabledata "Sales Invoice Line" = m;
于 2020-01-30T08:28:00.403 回答