Hi, Readers.
A few days ago we discussed how to set and change the default sort order of a page in Business Central.
I received some questions, one of them is very interesting. Is it possible to move the line up and down on the list page? For example, on the sales order subform.
In this post, I would like to share a simple solution on how to move the line up or down in Business Central. This may not be the best solution, but hope this will help.
Goal: Add new feature of moving line up and down in Sales Order Subform (46, ListPart)
Note: Never modify the keys of the table to move lines up and down.
Okay, let’s start.
1. Add a new field to record the position of the sales line.
2. The new field is automatically assigned a value after the sales line is inserted.
3. Display the new field on the page and modify the default sorting. (You can ignore the “Line No.”)
4. Added new logic and actions.
Publish and test:
Test Video:
Source Code: GitHub | MoveLineUpAndDown
tableextension 50100 SalesLineExt extends "Sales Line"
{
fields
{
field(50100; "ZY Line Position"; Integer)
{
Caption = 'Line Position';
DataClassification = CustomerContent;
}
}
trigger OnAfterInsert()
begin
"ZY Line Position" := FindLastLinePosition() + 1;
Rec.Modify();
end;
procedure FindLastLinePosition(): Integer
var
SalesLine: Record "Sales Line";
begin
SalesLine.Reset();
SalesLine.SetRange("Document Type", "Document Type");
SalesLine.SetRange("Document No.", "Document No.");
SalesLine.SetCurrentKey("ZY Line Position");
SalesLine.Ascending(true);
if SalesLine.FindLast() then
exit(SalesLine."ZY Line Position")
else
exit(0);
end;
}
pageextension 50100 SalesOrderSubformExt extends "Sales Order Subform"
{
layout
{
modify("Line No.")
{
Visible = true;
}
moveafter(Type; "Line No.")
addbefore(Type)
{
field("ZY Line Position"; Rec."ZY Line Position")
{
ApplicationArea = All;
Editable = false;
}
}
}
actions
{
addbefore("F&unctions")
{
action("Move Up")
{
Caption = 'Move Up';
ApplicationArea = All;
Image = MoveUp;
Promoted = true;
PromotedCategory = Process;
PromotedIsBig = true;
ToolTip = 'Move current line up.';
trigger OnAction()
begin
MoveSalesLine(-1);
end;
}
action("Move Down")
{
Caption = 'Move Down';
ApplicationArea = All;
Image = MoveDown;
Promoted = true;
PromotedCategory = Process;
PromotedIsBig = true;
ToolTip = 'Move current line down.';
trigger OnAction()
begin
MoveSalesLine(1);
end;
}
}
}
trigger OnOpenPage()
begin
Rec.SetCurrentKey("ZY Line Position");
Rec.Ascending(true);
end;
Local procedure MoveSalesLine(MoveBy: Integer)
var
SalesLine: Record "Sales Line";
begin
SalesLine.Reset();
SalesLine.SetRange("Document Type", Rec."Document Type");
SalesLine.SetRange("Document No.", Rec."Document No.");
SalesLine.SetRange("ZY Line Position", Rec."ZY Line Position" + MoveBy);
if SalesLine.FindFirst then begin
SalesLine."ZY Line Position" -= MoveBy;
SalesLine.Modify();
Rec."ZY Line Position" += MoveBy;
Rec.Modify();
end;
end;
}
END
Hope this will help.
Thanks for reading.
ZHU
コメント