just adding some additional information here.
you can try using the OnBeforeCheckPurchaseApprovalPossible event,


codeunit 52452 TestCodeUnit
{
[EventSubscriber(ObjectType::Codeunit, Codeunit::"Approvals Mgmt.", OnBeforeCheckPurchaseApprovalPossible, '', false, false)]
local procedure OnBeforeCheckPurchaseApprovalPossible(var PurchaseHeader: Record "Purchase Header"; var Result: Boolean; var IsHandled: Boolean);
begin
if (PurchaseHeader."Free Text" = '') then
Error('Narration field is blank on Purchase Order. Kindly fill the same to sent PO for approval');
end;
}
It runs before the purchase order is sent for approval, so you can use it to add your validation check and prevent the order from being sent if the field is empty.

Regards.