Version 1 dient i.W. zur Transaktionskontrolle und ist da eher ungeeignet, da ja nun mal viele nicht benötigten Änderungen vorhanden sind.
Vesion 2 mag vielleicht aufwändig sein, ist aber die einfachste Lösung.
Zumal mit Qualified DS'n und einfachheit der RPG-Trigger, zum Protokoll ein Eval-Corr und Write reicht.
Um zu prüfen ob sich tzatsächlich was geändert hat, so ist dies auch einfach:


dcl-ds beforeDS extfile(...) qualified based(bPointer);
dcl-ds afterDS extfile(...) qualified based(aPointer);

dcl-ds beforeCmp qualified;
f1 like(beforDs.F1);
end-ds;
dcl-ds afterCmp likeds(beforCmp);

eval-corr beforCmp = beforeDS;
eval-corr afterCmp = afterDS;
if beforCmp <> AfterCmp;
write .....
endif;

SQL scheidet dabei leider aus, da SQL keine Strukturen kennt und jedes Feld explizit und mehrmals genannt werden muss.