Het komt vaak genoeg voor; een log om bepaalde records, velden of acties bij te houden. De database log is hierin een handige tool, maar deze geeft inzicht in onder welk account welke actie met welke waarden zijn gewijzigd, maar niet waar in de applicatie. Soms zijn bijwerkacties niet altijd vanzelfsprekend, en dan is het zoeken naar wat er voor een proces heeft plaatsgevonden. Vooral als de actie plaats vind als onderdeel van een proces in een maatwerk module is het zoeken.
Een kleine aanpassing om te helpen, werkt in AX2009 maar ook AX4.0; toevoegen van de callstack aan de databaselog.
Technisch zeer eenvoudig; een nieuw container veld op de sysdatabaselog krijg op moment van de insert de callstack:
1 public void insert() 2 { 3 container callStack; 4 ; 5 6 new SysDatabaseLogPermission().demand(); 7 8 this.Username = UserInfoHelp::userName(curuserid()); 9 // INT Ghull - Begin - add calling callstack 10 callStack = xsession::xppCallStack(); 11 callStack = condel(callstack, 1, 6); // Skip the 3 top stack lines {...} 12 this.INTCallStack = callStack; 13 // INT Ghull - end - add calling callstack 14 super(); 15 }
1 //INT 20150621 Ghull - show callstack stored in database log 2 void clicked() 3 { 4 int stackLength = conlen(SysDatabaseLog.INTCallStack) / 2; // 2nd value line number 5 int idx; 6 ; 7 8 for (idx = 0; idx < stackLength; idx++) 9 { 10 info(strfmt('%1 (%2)', conpeek(SysDatabaseLog.INTCallStack, idx*2+1), 11 conpeek(SysDatabaseLog.INTCallStack, idx*2+2))); 12 } 13 }
Gerrit
Geen opmerkingen:
Een reactie posten